คำถามติดแท็ก c++11

ใช้แท็กนี้สำหรับรหัสที่ต้องคอมไพล์เป็น C ++ 11 (ไม่ใช้ฟีเจอร์ที่แนะนำใน C ++ 14 หรือใหม่กว่า)

15
C ++ 11 มีคุณสมบัติ C # -style หรือไม่?
ใน C # มีน้ำตาลไวยากรณ์ที่ดีสำหรับฟิลด์ที่มี getter และ setter นอกจากนี้ฉันชอบคุณสมบัติที่ใช้งานอัตโนมัติซึ่งอนุญาตให้ฉันเขียนได้ public Foo foo { get; private set; } ใน C ++ ฉันต้องเขียน private: Foo foo; public: Foo getFoo() { return foo; } มีแนวคิดบางอย่างใน C ++ 11 ที่อนุญาตให้ฉันมีน้ำตาลไวยากรณ์ในเรื่องนี้หรือไม่
94 c#  c++  class  c++11 

2
std :: map ขยายรายการ initializer จะเป็นอย่างไร
หากมีอยู่std::mapรายการเริ่มต้นเพิ่มเติมจะมีลักษณะอย่างไร ฉันได้ลองใช้ชุดค่าผสมของ ... ทุกอย่างที่ฉันคิดได้ด้วย GCC 4.4 แต่ไม่พบสิ่งใดที่รวบรวมได้

2
รหัสจาก“ ภาษาโปรแกรม C ++” ฉบับที่ 4 ส่วน 36.3.6 มีลักษณะการทำงานที่กำหนดไว้อย่างชัดเจนหรือไม่
ใน Bjarne Stroustrup ของc ++ เขียนโปรแกรมภาษาส่วนฉบับที่ 4 36.3.6 STL เหมือนการดำเนินงานรหัสต่อไปนี้จะใช้เป็นตัวอย่างของการผูกมัด : void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( "even" ), 4, "only" ) .replace( s.find( " don't" ), 6, "" ); assert( …

7
คุณลักษณะ C ++ 11 ใน Visual Studio 2012
เวอร์ชันตัวอย่างของ Visual Studio 2012 (เวอร์ชันถัดไปหลังจาก VS2010) พร้อมใช้งานแล้ว มีใครรู้บ้างว่าฟีเจอร์ใหม่ของ C ++ 11 ที่รองรับ? (ฉันไม่อยู่ในสถานะที่จะทดลองใช้ในขณะนี้)

4
ส่ง shared_ptr <Derived> เป็น shared_ptr <Base>
วิธีใดที่ดีที่สุดในการส่งผ่านshared_ptrประเภทที่ได้รับไปยังฟังก์ชันที่ใช้shared_ptrประเภทฐาน โดยทั่วไปฉันส่งผ่านshared_ptrs โดยการอ้างอิงเพื่อหลีกเลี่ยงสำเนาที่ไม่จำเป็น: int foo(const shared_ptr&lt;bar&gt;&amp; ptr); แต่จะไม่ได้ผลถ้าฉันพยายามทำสิ่งที่ชอบ int foo(const shared_ptr&lt;Base&gt;&amp; ptr); ... shared_ptr&lt;Derived&gt; bar = make_shared&lt;Derived&gt;(); foo(bar); ฉันสามารถใช้ foo(dynamic_pointer_cast&lt;Base, Derived&gt;(bar)); แต่ดูเหมือนว่าจะไม่เหมาะสมด้วยเหตุผลสองประการ: dynamic_castดูเหมือนว่าบิตมากเกินไปสำหรับการที่เรียบง่ายที่ได้รับการหล่อฐาน ตามที่ฉันเข้าใจdynamic_pointer_castสร้างสำเนา (แม้ว่าจะเป็นเพียงชั่วคราว) ของตัวชี้เพื่อส่งผ่านไปยังฟังก์ชัน มีทางออกที่ดีกว่านี้หรือไม่? อัปเดตสำหรับลูกหลาน: มันกลายเป็นปัญหาของไฟล์ส่วนหัวที่หายไป นอกจากนี้สิ่งที่ฉันพยายามทำต่อไปนี้ถือเป็นปฏิปักษ์ โดยทั่วไปแล้ว ฟังก์ชั่นที่ไม่ได้ส่งผลกระทบต่อชีวิตของวัตถุ (เช่นวัตถุที่ยังคงถูกต้องสำหรับระยะเวลาของฟังก์ชั่น) int foo(bar&amp; b)ควรจะใช้การอ้างอิงธรรมดาหรือตัวชี้เช่น ฟังก์ชั่นที่ใช้วัตถุ (เช่นเป็นผู้ใช้ขั้นสุดท้ายของวัตถุที่กำหนด) ควรใช้โดยค่าเช่นunique_ptr int foo(unique_ptr&lt;bar&gt; b)ผู้โทรควรstd::moveใส่ค่าลงในฟังก์ชัน ฟังก์ชั่นที่ขยายอายุการใช้งานของวัตถุควรใช้โดยค่าเช่นshared_ptr int foo(shared_ptr&lt;bar&gt; b)คำแนะนำตามปกติเพื่อหลีกเลี่ยงการอ้างอิงแบบวงกลมใช้ ดูรายละเอียดเกี่ยวกับ Back to Basicsของ …

3
จะบังคับใช้ความหมายการย้ายได้อย่างไรเมื่อเวกเตอร์เติบโตขึ้น
ฉันมีstd::vectorวัตถุของชั้นAหนึ่ง คลาสไม่สำคัญและมีตัวสร้างการคัดลอกและย้ายตัวสร้างที่กำหนดไว้ std::vector&lt;A&gt; myvec; ถ้าฉันเติมเวกเตอร์ด้วยAวัตถุ (โดยใช้เช่นmyvec.push_back(a)) เวกเตอร์จะมีขนาดใหญ่ขึ้นโดยใช้ตัวสร้างการคัดลอกA( const A&amp;)เพื่อสร้างอินสแตนซ์สำเนาใหม่ขององค์ประกอบในเวกเตอร์ ฉันสามารถบังคับใช้ตัวสร้างการย้ายของคลาสAแทนได้หรือไม่?

2
เหตุใดฉันจึงจับสิ่งนี้โดยอ้างอิง ('& this') ในแลมบ์ดาไม่ได้
ฉันเข้าใจวิธีที่ถูกต้องในการจับภาพthis(เพื่อแก้ไขคุณสมบัติของวัตถุ) ในแลมบ์ดามีดังนี้: auto f = [this] () { /* ... */ }; แต่ฉันอยากรู้เกี่ยวกับลักษณะเฉพาะต่อไปนี้ที่ฉันเคยเห็น: class C { public: void foo() { // auto f = [] () { // this not captured auto f = [&amp;] () { // why does this work? // auto f = [&amp;this] () { // …
93 c++  c++11  lambda 

3
คอนสตรัคเตอร์ส่วนตัวไม่ใช่คอนสตรัคเตอร์ส่วนตัวเมื่อใด
สมมติว่าฉันมีประเภทและฉันต้องการทำให้ตัวสร้างเริ่มต้นเป็นแบบส่วนตัว ฉันเขียนสิ่งต่อไปนี้: class C { C() = default; }; int main() { C c; // error: C::C() is private within this context (g++) // error: calling a private constructor of class 'C' (clang++) // error C2248: 'C::C' cannot access private member declared in class 'C' (MSVC) auto c2 = C(); …

6
ข้อผิดพลาด :: make_unique ไม่ใช่สมาชิกของ 'std'
ฉันกำลังพยายามรวบรวมโปรแกรมเธรดพูลต่อไปนี้ที่โพสต์ในการตรวจสอบโค้ดเพื่อทดสอบ /codereview/55100/platform-independant-thread-pool-v4 แต่ฉันได้รับข้อผิดพลาด threadpool.hpp: In member function ‘std::future&lt;decltype (task((forward&lt;Args&gt;)(args)...))&gt; threadpool::enqueue_task(Func&amp;&amp;, Args&amp;&amp; ...)’: threadpool.hpp:94:28: error: ‘make_unique’ was not declared in this scope auto package_ptr = make_unique&lt;task_package_impl&lt;R, decltype(bound_task)&gt;&gt; (std::move(bound_task), std::move(promise)); ^ threadpool.hpp:94:81: error: expected primary-expression before ‘&gt;’ token auto package_ptr = make_unique&lt;task_package_impl&lt;R, decltype(bound_task)&gt;&gt;(std::move(bound_task), std::move(promise)); ^ main.cpp: In function ‘int main()’: main.cpp:9:17: error: …

4
รูปแบบไวยากรณ์ชนิดการส่งคืนต่อท้ายควรเป็นค่าเริ่มต้นสำหรับโปรแกรม C ++ 11 ใหม่หรือไม่ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ C ++ 11 รองรับไวยากรณ์ของฟังก์ชันใหม่: auto func_name(int x, int y) -&gt; int; ปัจจุบันฟังก์ชันนี้จะประกาศเป็น: int func_name(int x, int y); รูปแบบใหม่ดูเหมือนจะยังไม่ได้รับการยอมรับอย่างกว้างขวาง (พูดใน gcc stl) อย่างไรก็ตามควรใช้สไตล์ใหม่นี้ทุกที่ในโปรแกรม C ++ 11 ใหม่หรือจะใช้เมื่อจำเป็นเท่านั้น? โดยส่วนตัวแล้วฉันชอบรูปแบบเก่าเมื่อเป็นไปได้ แต่ฐานรหัสที่มีรูปแบบผสมดูค่อนข้างน่าเกลียด

3
Constexpr เทียบกับมาโคร
ฉันควรใช้มาโครที่ไหนและฉันควรใช้constexprที่ไหน โดยพื้นฐานแล้วพวกเขาไม่เหมือนกันหรือ? #define MAX_HEIGHT 720 เทียบกับ constexpr unsigned int max_height = 720;
92 c++  c++11  macros  constexpr 

4
cc1plus: ข้อผิดพลาด: ไม่รู้จักตัวเลือกบรรทัดคำสั่ง“ -std = c ++ 11” พร้อม g ++
ฉันกำลังพยายามรวบรวมโดยใช้g++และแฟล็ก-std=c++11หรือc++0x อย่างไรก็ตามฉันได้รับข้อผิดพลาดนี้ cc1plus: error: unrecognized command line option "-std=c++11" g ++ - รุ่น g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR …

2
เหตุใดฟังก์ชันที่ถูกลบ C ++ 11 จึงมีส่วนร่วมในการแก้ปัญหาโอเวอร์โหลด
ทำไม C ++ 11 ทำให้" deleted" ฟังก์ชั่นมีส่วนร่วมในการแก้ปัญหาเกิน ? เหตุใดจึงมีประโยชน์ หรือกล่าวอีกนัยหนึ่งว่าเหตุใดจึงซ่อนไว้แทนที่จะถูกลบทั้งหมด
92 c++  c++11 

2
วงเล็บเสริมจะมีผลเมื่อใดนอกเหนือจากลำดับความสำคัญของตัวดำเนินการ
วงเล็บใน C ++ ถูกใช้ในหลาย ๆ ที่เช่นในการเรียกใช้ฟังก์ชันและการจัดกลุ่มนิพจน์เพื่อแทนที่ลำดับความสำคัญของตัวดำเนินการ นอกเหนือจากวงเล็บเสริมที่ผิดกฎหมาย (เช่นรอบรายการอาร์กิวเมนต์การเรียกใช้ฟังก์ชัน) ทั่วไป - แต่ไม่ใช่กฎสัมบูรณ์ของ C ++ คือวงเล็บพิเศษจะไม่ทำร้าย : 5.1 นิพจน์หลัก [expr.prim] 5.1.1 ทั่วไป [expr.prim.general] 6 นิพจน์ในวงเล็บคือนิพจน์หลักที่มีชนิดและค่าเหมือนกันกับนิพจน์ที่แนบมา การมีอยู่ของวงเล็บจะไม่ส่งผลต่อนิพจน์ว่าเป็น lvalue หรือไม่ นิพจน์วงเล็บสามารถใช้ในบริบทเดียวกับที่สามารถใช้นิพจน์ที่แนบมาได้ทุกประการและมีความหมายเหมือนกันยกเว้นที่ระบุไว้เป็นอย่างอื่น คำถาม : ในบริบทใดที่วงเล็บเสริมเปลี่ยนความหมายของโปรแกรม C ++ นอกเหนือจากการแทนที่ลำดับความสำคัญของตัวดำเนินการพื้นฐาน หมายเหตุ : ฉันพิจารณาข้อ จำกัด ของไวยากรณ์ตัวชี้ถึงสมาชิกที่&amp;qualified-idไม่มีวงเล็บให้อยู่นอกขอบเขตเนื่องจากจำกัด ไวยากรณ์แทนที่จะอนุญาตให้สองไวยากรณ์ที่มีความหมายต่างกัน ในทำนองเดียวกันการใช้วงเล็บภายในนิยามมาโครของตัวประมวลผลล่วงหน้ายังป้องกันความสำคัญของตัวดำเนินการที่ไม่ต้องการ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.