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

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


3
“ การอ้างอิงค่าสำหรับ * นี้” คืออะไร?
มาข้ามข้อเสนอที่เรียกว่า "การอ้างอิง rvalue สำหรับ * นี้" ในเสียงดังกราวของC ++ หน้า ฉันได้อ่านเกี่ยวกับการอ้างอิงค่าและเข้าใจพวกเขามาบ้าง แต่ฉันไม่คิดว่าฉันจะรู้เรื่องนี้ ฉันไม่สามารถหาแหล่งข้อมูลมากมายบนเว็บโดยใช้คำศัพท์ มีลิงก์ไปยังเอกสารข้อเสนอบนหน้า: N2439 (ขยายความหมายของการย้ายไปเป็น * สิ่งนี้) แต่ฉันก็ไม่ได้รับตัวอย่างมากมายจากที่นั่น คุณสมบัตินี้เกี่ยวกับอะไร?

17
มีการใช้งาน unique_ptr กับอาเรย์ไหม?
std::unique_ptr มีการสนับสนุนสำหรับอาร์เรย์ตัวอย่างเช่น: std::unique_ptr<int[]> p(new int[10]); แต่มันจำเป็นหรือไม่ อาจจะมีความสะดวกมากขึ้นในการใช้หรือstd::vectorstd::array คุณพบว่ามีประโยชน์สำหรับการสร้างที่?

1
std :: vector ถดถอยประสิทธิภาพเมื่อเปิดใช้งาน C ++ 11
ฉันพบการถดถอยของประสิทธิภาพที่น่าสนใจใน C ++ snippet ขนาดเล็กเมื่อฉันเปิดใช้ C ++ 11: #include <vector> struct Item { int a; int b; }; int main() { const std::size_t num_items = 10000000; std::vector<Item> container; container.reserve(num_items); for (std::size_t i = 0; i < num_items; ++i) { container.push_back(Item()); } return 0; } ด้วย g ++ (GCC) 4.8.2 20131219 …
235 c++  performance  gcc  c++11  vector 

4
ทำไมฉันถึงต้องใช้ push_back แทน emplace_back
C ++ 11 emplace_backเวกเตอร์ที่มีฟังก์ชั่นใหม่ ซึ่งแตกต่างจากpush_backอาศัยการเพิ่มประสิทธิภาพของคอมไพเลอร์เพื่อหลีกเลี่ยงการคัดลอกemplace_backใช้การส่งต่อที่สมบูรณ์แบบเพื่อส่งข้อโต้แย้งโดยตรงไปที่นวกรรมิกเพื่อสร้างวัตถุในสถานที่ ดูเหมือนว่าฉันemplace_backจะทำทุกอย่างpush_backได้ แต่บางครั้งมันก็ทำได้ดีกว่า (แต่ไม่เคยแย่ลง) ฉันต้องใช้เหตุผลpush_backอะไร
232 c++  c++11  std 

4
การใช้ 'อัตโนมัติ' ของ C ++ 11 สามารถปรับปรุงประสิทธิภาพได้หรือไม่
ฉันเห็นได้ว่าทำไมautoประเภทใน C ++ 11 ช่วยปรับปรุงความถูกต้องและการบำรุงรักษา ฉันอ่านแล้วว่ามันยังสามารถปรับปรุงประสิทธิภาพได้ ( เกือบจะอัตโนมัติทุกครั้งโดย Herb Sutter) แต่ฉันพลาดคำอธิบายที่ดี จะautoปรับปรุงประสิทธิภาพได้อย่างไร ใครสามารถยกตัวอย่างได้บ้าง
230 c++  performance  c++11  auto 

10
ฟังก์ชั่นแลมบ์ดาสามารถ Templated ได้หรือไม่?
ใน C ++ 11 มีวิธีการสร้างฟังก์ชัน lambda หรือไม่? หรือมันเจาะจงเกินไปที่จะรับเทมเพลต? ฉันเข้าใจว่าฉันสามารถกำหนด class / functor คลาสสิกเทมเพลตแทน แต่คำถามเป็นเช่น: ภาษาอนุญาตให้ฟังก์ชัน lambda templating?
230 c++  templates  lambda  c++11 

4
ฉันควรใช้ตัวชี้ประเภทใดเมื่อใด
ตกลงดังนั้นครั้งสุดท้ายที่ฉันเขียน C ++ เพื่อหาเลี้ยงชีพ std::auto_ptrคือ std lib ทั้งหมดที่มีอยู่และboost::shared_ptrเป็นความเดือดดาลทั้งหมด ฉันไม่เคยมองไปที่การเพิ่มประเภทตัวชี้อัจฉริยะอื่น ๆ ฉันเข้าใจว่าตอนนี้ C ++ 11 มีการเพิ่มประเภทบางอย่าง แต่ไม่ใช่ทั้งหมด ดังนั้นใครบางคนจึงมีอัลกอริทึมง่าย ๆ ในการพิจารณาว่าจะใช้ตัวชี้สมาร์ทตัวไหน ควรรวมถึงคำแนะนำเกี่ยวกับพอยน์เตอร์พอยน์เตอร์ (พอยน์เตอร์ดิบเช่นT*) และสมาร์ทพอยน์เตอร์ที่เหลือ (บางอย่างเช่นนี้จะดีมาก)

10
มีการเปลี่ยนแปลงอะไรใหม่ใน C ++ 11
ฉันรู้ว่าอย่างน้อยหนึ่งของการเปลี่ยนแปลงใน C ++ 11 ที่จะทำให้เกิดรหัสเดิมบางส่วนที่จะหยุดการรวบรวม: แนะนำของในห้องสมุดมาตรฐานแทนที่กรณีเก่าexplicit operator bool() operator void*()ได้รับรหัสที่ว่านี้จะทำลายอาจเป็นรหัสที่ไม่ควรถูกต้องในสถานที่แรก แต่มันก็ยังคงเป็นการเปลี่ยนแปลงที่แตกหัก: โปรแกรมที่เคยใช้ไม่ถูกต้องอีกต่อไป มีการเปลี่ยนแปลงที่แตกหักอื่น ๆ อีกหรือไม่?
227 c++  c++11 

5
คำหลัก 'แทนที่' เป็นเพียงการตรวจสอบวิธีเสมือนจริงที่ถูกแทนที่หรือไม่
เท่าที่ฉันเข้าใจการแนะนำของoverrideคำหลักใน C ++ 11 ไม่มีอะไรมากไปกว่าการตรวจสอบเพื่อให้แน่ใจว่าฟังก์ชั่นการใช้งานเป็นการนำoverrideของvirtualฟังก์ชั่นในชั้นฐาน มันคืออะไร

5
“ ค่าเริ่มต้น” หมายถึงอะไรหลังจากประกาศฟังก์ชัน 'คลาส'?
ฉันเคยเห็นdefaultใช้ถัดจากการประกาศฟังก์ชั่นในชั้นเรียน มันทำอะไร? class C { C(const C&) = default; C(C&&) = default; C& operator=(const C&) & = default; C& operator=(C&&) & = default; virtual ~C() { } };

14
คำหลักอัตโนมัติ C ++ 11 มีมากเกินไป
ฉันใช้autoคำหลักใหม่ที่มีอยู่ในมาตรฐาน C ++ 11 สำหรับประเภท templated ที่ซับซ้อนซึ่งเป็นสิ่งที่ฉันเชื่อว่าได้รับการออกแบบมา แต่ฉันก็ใช้มันเพื่อสิ่งต่าง ๆ เช่น: auto foo = std::make_shared<Foo>(); และน่าสงสัยมากขึ้นสำหรับ: auto foo = bla(); // where bla() return a shared_ptr<Foo> ฉันไม่เห็นการสนทนาในหัวข้อนี้มากนัก ดูเหมือนว่าautoจะใช้มากเกินไปเนื่องจากประเภทหนึ่งมักเป็นรูปแบบของเอกสารและการตรวจสอบสติ คุณวาดเส้นในการใช้ที่ไหนautoและกรณีการใช้งานที่แนะนำสำหรับคุณลักษณะใหม่นี้คืออะไร เพื่อชี้แจง: ฉันไม่ได้ขอความคิดเห็นทางปรัชญา; ฉันขอใช้คำหลักนี้อย่างตั้งใจโดยคณะกรรมการมาตรฐานอาจมีความคิดเห็นเกี่ยวกับวิธีการใช้งานที่ตั้งใจนั้นได้รับรู้ในทางปฏิบัติ หมายเหตุด้านข้าง: คำถามนี้ถูกย้ายไปที่ SE.Programmers แล้วกลับไปที่ Stack Overflow การสนทนาเกี่ยวกับเรื่องนี้สามารถพบได้ในคำถามเมตานี้

2
ทำไมฉันไม่สามารถผลักดัน unique_ptr ไปยังเวกเตอร์ได้
เกิดอะไรขึ้นกับโปรแกรมนี้ #include <memory> #include <vector> int main() { std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } ข้อผิดพลาด: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr<int>, _Tp* …

6
make_unique และการส่งต่อที่สมบูรณ์แบบ
เหตุใดจึงไม่มีstd::make_uniqueเทมเพลตฟังก์ชันในไลบรารี C ++ 11 มาตรฐาน ฉันหา std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); verbose เล็กน้อย ต่อไปนี้จะดีกว่านี้ไหม auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); สิ่งนี้ซ่อนสิ่งที่newดีและกล่าวถึงเพียงครั้งเดียวเท่านั้น อย่างไรก็ตามนี่คือความพยายามของฉันในการดำเนินการmake_unique: template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); } ฉันใช้เวลาพอสมควรในการstd::forwardรวบรวมสิ่งต่าง ๆ แต่ฉันไม่แน่ใจว่ามันถูกต้องหรือไม่ ใช่ไหม? std::forward<Args>(args)...หมายความว่าอะไรกันแน่? คอมไพเลอร์ทำอะไรได้บ้าง

4
วนรอบตาม C ++ 11: รับไอเท็มตามค่าหรืออ้างอิงถึง const
การอ่านตัวอย่างของลูปแบบช่วงพวกเขาแนะนำสองวิธีหลัก1 , 2 , 3 , 4 std::vector<MyClass> vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec's items by changing x } หรือ for (auto x : vec) { // Value of x is copied from an …
215 c++  c++11 

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