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

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

7
ใน C ++ การคืนเวกเตอร์จากฟังก์ชันยังคงไม่ดีอยู่หรือไม่?
เวอร์ชันสั้น:เป็นเรื่องปกติที่จะส่งคืนวัตถุขนาดใหญ่เช่นเวกเตอร์ / อาร์เรย์ในภาษาโปรแกรมหลายภาษา สไตล์นี้เป็นที่ยอมรับใน C ++ 0x หรือไม่ถ้าคลาสมีตัวสร้างการย้ายหรือโปรแกรมเมอร์ C ++ คิดว่ามันแปลก / น่าเกลียด / น่ารังเกียจหรือไม่? เวอร์ชันยาว:ใน C ++ 0x ยังถือว่าเป็นรูปแบบที่ไม่ดีหรือไม่? std::vector<std::string> BuildLargeVector(); ... std::vector<std::string> v = BuildLargeVector(); เวอร์ชันดั้งเดิมจะมีลักษณะดังนี้: void BuildLargeVector(std::vector<std::string>& result); ... std::vector<std::string> v; BuildLargeVector(v); ในเวอร์ชันที่ใหม่กว่าค่าที่ส่งกลับมาBuildLargeVectorคือ rvalue ดังนั้น v จะถูกสร้างโดยใช้ตัวสร้างการย้ายstd::vectorโดยสมมติว่า (N) RVO ไม่เกิดขึ้น แม้กระทั่งก่อน C ++ 0x รูปแบบแรกมักจะ "มีประสิทธิภาพ" เนื่องจาก …

3
C ++ 14 เพิ่มคีย์เวิร์ดใหม่ใน C ++ หรือไม่
คณะกรรมการมาตรฐาน C ++ มีแนวโน้มที่จะหลีกเลี่ยงการเพิ่มคำหลักใหม่ในภาษา แต่ C ++ 11 นั้นไม่เป็นเช่นนั้น ตัวอย่างบางส่วน: constexpr decltype thread_local auto // New usage noexcept nullptr static_assert alignof alignas มีคำหลักใหม่ ๆ ที่ใช้กับ C ++ 14 หรือไม่?
103 c++  c++11  keyword  c++14 

4
shared_ptr อยู่ที่ไหน
ตอนนี้ฉันรู้สึกหงุดหงิดมากหลังจากพยายามหาที่ตั้งของ shared_ptr อยู่หลายชั่วโมง ไม่มีตัวอย่างใดที่ฉันเห็นแสดงโค้ดที่สมบูรณ์เพื่อรวมส่วนหัวสำหรับshared_ptr(และใช้งานได้) เพียงแค่ระบุstd, tr1และ<memory>ไม่ได้ช่วยที่ทุกคน! ฉันดาวน์โหลดบูสต์แล้ว แต่ก็ยังไม่ปรากฏ! ใครช่วยบอกทีว่าหาได้ที่ไหน ขอบคุณที่ให้ฉันระบายความผิดหวัง! แก้ไข: ฉันเห็นว่าชื่อของฉันเปลี่ยนไป ขอโทษด้วยกับเรื่องนั้น. ดังนั้น ... มันยังเป็นเพราะฉันไม่ชัดเจนว่า shared_ptr "ขึ้นอยู่กับเวอร์ชัน C ++" -> นั่นเป็นสาเหตุที่ฉันไม่ระบุสภาพแวดล้อมของฉัน -> ดังนั้นจึงเป็นเรื่องยากสำหรับฉันที่จะค้นหามัน ฉันกำลังทำงานกับ MSVS2008 แก้ไข 2: ฉันไม่รู้ว่าทำไม แต่ฉันรวม [memory] และ [boost / tr1 / memory.hpp] และ [boost / tr1 / tr1 / memory] ในขณะที่มองหา shared_ptr ทุกที่ .. แน่นอนฉันทำไม่ได้ …

2
C ++ 0x แลมบ์ดาจับตามค่าเสมอ const?
มีวิธีใดบ้างในการจับตามมูลค่าและทำให้ค่าที่จับได้ไม่ใช่ const? ฉันมี functor ของไลบรารีที่ฉันต้องการจับภาพและเรียกใช้เมธอดที่ไม่ใช่ const แต่ควรจะเป็น สิ่งต่อไปนี้ไม่ได้รวบรวม แต่การสร้าง foo :: operator () const จะแก้ไขได้ struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; …
103 c++  lambda  const  c++11 

3
การเชื่อมโยงวัตถุ C ++ 17, C ++ 14 และ C ++ 11 นั้นปลอดภัยหรือไม่
สมมติว่าฉันมีออบเจ็กต์ที่คอมไพล์สามชิ้นทั้งหมดสร้างโดยคอมไพเลอร์ / เวอร์ชันเดียวกัน : A ถูกรวบรวมด้วยมาตรฐาน C ++ 11 B ถูกรวบรวมด้วยมาตรฐาน C ++ 14 C ถูกคอมไพล์ด้วยมาตรฐาน C ++ 17 เพื่อความเรียบง่ายสมมติว่าส่วนหัวทั้งหมดเขียนด้วย C ++ 11 โดยใช้เฉพาะโครงสร้างที่ความหมายไม่ได้เปลี่ยนแปลงระหว่างเวอร์ชันมาตรฐานทั้งสามดังนั้นการพึ่งพาระหว่างกันจึงถูกแสดงอย่างถูกต้องด้วยการรวมส่วนหัวและคอมไพเลอร์ไม่คัดค้าน การรวมกันของวัตถุเหล่านี้คืออะไรและไม่ปลอดภัยที่จะเชื่อมโยงเป็นไบนารีเดียว? ทำไม? แก้ไข: ยินดีต้อนรับคำตอบที่ครอบคลุมคอมไพเลอร์หลัก (เช่น gcc, clang, vs ++)
103 c++  c++11  linker  c++14  abi 

12
Visual Studio รองรับมาตรฐาน C / C ++ ใหม่หรือไม่
ฉันอ่านเกี่ยวกับ C99 และ C ++ 11 มาเรื่อย ๆ และสิ่งที่น่ารักเหล่านี้ทั้งหมดที่เพิ่มเข้ามาในมาตรฐานภาษาที่อาจจะดีในการใช้สักวันหนึ่ง อย่างไรก็ตามขณะนี้เราไม่ได้อยู่ในดินแดนแห่งการเขียน C ++ ใน Visual Studio จะมีการเพิ่มสิ่งใหม่ ๆ ในมาตรฐานลงใน Visual Studio หรือไม่หรือ Microsoft สนใจที่จะเพิ่มตัวแปร C # ใหม่เพื่อทำสิ่งนั้น แก้ไข: นอกจากคำตอบที่ยอมรับแล้วฉันยังพบบล็อกของทีม Visual C ++: http://blogs.msdn.com/vcblog/ และโดยเฉพาะโพสต์นี้อยู่ในนั้น: https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/ มีประโยชน์มาก. ขอบคุณ!

2
คลาสข้อยกเว้นใดบ้างที่อยู่ในไลบรารี C ++ มาตรฐาน
คลาสข้อยกเว้นที่รวมอยู่ในไลบรารี C ++ มาตรฐานคืออะไรและควรใช้ทำอะไร ฉันรู้ว่ามีข้อยกเว้น C ++ 11 ใหม่ ๆ อยู่บ้าง แต่ฉันไม่แน่ใจว่ามันคืออะไรหรืออยู่ที่ไหน
102 c++  exception  c++11  stl 

2
การสร้างตัวเลขสุ่มใน C ++ 11: การสร้างมันทำงานอย่างไร [ปิด]
มันยากที่จะบอกว่ากำลังถามอะไรที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือมีวาทศิลป์และไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน9 ปีที่ผ่านมา ฉันเพิ่งค้นพบวิธีใหม่ในการสร้างตัวเลขสุ่มใน C ++ 11 แต่ไม่สามารถย่อยเอกสารที่ฉันอ่านเกี่ยวกับเรื่องนี้ได้ ( เครื่องมือนั้นคืออะไรคำศัพท์ทางคณิตศาสตร์เช่นการแจกแจง "โดยที่จำนวนเต็มทั้งหมดที่ได้มีโอกาสเท่ากัน ") ใครก็ได้โปรดอธิบาย พวกเขาคืออะไร? หมายความว่าอย่างไร วิธีสร้าง? พวกเขาทำงานอย่างไร? ฯลฯ คุณสามารถเรียกทั้งหมดนี้ได้ในคำถามที่พบบ่อยเกี่ยวกับการสร้างตัวเลขแบบสุ่ม
102 c++  c++11  random 

6
ส่งผ่านอาร์เรย์ std :: ที่ไม่ทราบขนาดไปยังฟังก์ชัน
ใน C ++ 11 ฉันจะเขียนฟังก์ชัน (หรือวิธีการ) ที่ใช้ std :: array ของชนิดที่รู้จัก แต่ไม่ทราบขนาดได้อย่างไร // made up example void mulArray(std::array<int, ?>& arr, const int multiplier) { for(auto& e : arr) { e *= multiplier; } } // lets imagine these being full of numbers std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> …
102 c++  c++11  stdarray 

5
std :: function ใช้งานอย่างไร?
ตามแหล่งที่มาที่ฉันพบนิพจน์แลมบ์ดาถูกนำไปใช้โดยคอมไพเลอร์ที่สร้างคลาสที่มีตัวดำเนินการเรียกใช้ฟังก์ชันมากเกินไปและตัวแปรที่อ้างอิงเป็นสมาชิก นี้แสดงให้เห็นว่าขนาดของการแสดงออกแลมบ์ดาแตกต่างกันไปและได้รับการอ้างอิงตัวแปรพอที่ขนาดอาจจะมีขนาดใหญ่โดยพลการ std::functionควรจะมีขนาดคงที่แต่ก็จะต้องสามารถที่จะตัดชนิดของ callables ใด ๆ รวมทั้ง lambdas ชนิดเดียวกันใด ๆ มีการใช้งานอย่างไร? หากstd::functionใช้ตัวชี้ไปยังเป้าหมายภายในจะเกิดอะไรขึ้นเมื่อstd::functionอินสแตนซ์ถูกคัดลอกหรือย้าย มีการจัดสรรฮีปที่เกี่ยวข้องหรือไม่?
102 c++  c++11  lambda 

3
gcc 4.8 หรือบั๊กกี้รุ่นก่อนหน้าเกี่ยวกับนิพจน์ทั่วไปหรือไม่
ฉันพยายามใช้ std :: regex ในโค้ด C ++ 11 แต่ดูเหมือนว่าการรองรับนั้นค่อนข้างมีปัญหา ตัวอย่าง: #include <regex> #include <iostream> int main (int argc, const char * argv[]) { std::regex r("st|mt|tr"); std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl; std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << …
101 c++  regex  gcc  c++11  libstdc++ 

8
มีคลาสเรนจ์ใน C ++ 11 สำหรับใช้กับ range ตามลูปหรือไม่?
ฉันพบว่าตัวเองเขียนสิ่งนี้เมื่อไม่นานมานี้: template <long int T_begin, long int T_end> class range_class { public: class iterator { friend class range_class; public: long int operator *() const { return i_; } const iterator &operator ++() { ++i_; return *this; } iterator operator ++(int) { iterator copy(*this); ++i_; return copy; } bool operator ==(const …
101 c++  c++11  std 

13
ฉันสามารถใช้สมาชิกประเภท "ตนเอง" แบบอิสระใน C ++ ได้หรือไม่
C ++ ไม่มีคีย์เวิร์ดที่เทียบเท่าของPHPselfซึ่งประเมินเป็นประเภทของคลาสปิดล้อม ง่ายพอที่จะปลอมเป็นรายชั้น: struct Foo { typedef Foo self; }; แต่ฉันต้องเขียนFooอีกครั้ง บางทีวันหนึ่งฉันอาจจะเข้าใจผิดและทำให้เกิดข้อผิดพลาด ฉันสามารถใช้ชุดค่าผสมdecltypeและเพื่อนเพื่อทำให้งานนี้เป็นแบบ "อัตโนมัติ" ได้หรือไม่ ฉันลองทำสิ่งต่อไปนี้แล้วแต่thisใช้ไม่ได้ในที่นั้น: struct Foo { typedef decltype(*this) self; }; // main.cpp:3:22: error: invalid use of 'this' at top level // typedef decltype(*this) self; (ฉันจะไม่กังวลเกี่ยวกับการเทียบเท่าstaticซึ่งจะเหมือนกัน แต่มีผลผูกพันในช่วงปลาย)
101 c++  c++11 

11
รวบรวมการแฮชสตริงเวลา
ฉันได้อ่านในที่ต่างๆไม่กี่แห่งว่าการใช้ตัวอักษรสตริงใหม่ของ C ++ 11 อาจเป็นไปได้ที่จะคำนวณแฮชของสตริงในเวลาคอมไพล์ อย่างไรก็ตามดูเหมือนจะไม่มีใครพร้อมที่จะออกมาพูดว่ามันจะเป็นไปได้หรือจะทำได้อย่างไร เป็นไปได้หรือไม่ ตัวดำเนินการจะมีลักษณะอย่างไร? ฉันสนใจเป็นพิเศษกรณีการใช้งานเช่นนี้ void foo( const std::string& value ) { switch( std::hash(value) ) { case "one"_hash: one(); break; case "two"_hash: two(); break; /*many more cases*/ default: other(); break; } } หมายเหตุ: ฟังก์ชันแฮชเวลาคอมไพล์ไม่จำเป็นต้องมีลักษณะตรงตามที่ฉันเขียนไว้ ฉันพยายามอย่างดีที่สุดที่จะเดาว่าทางออกสุดท้ายจะเป็นอย่างไร แต่meta_hash<"string"_meta>::valueก็อาจเป็นทางออกที่ใช้ได้

3
จะเชี่ยวชาญ std :: hash <Key> :: operator () สำหรับชนิดที่ผู้ใช้กำหนดในคอนเทนเนอร์ที่ไม่ได้เรียงลำดับได้อย่างไร
ในการรองรับประเภทคีย์ที่ผู้ใช้กำหนดstd::unordered_set&lt;Key&gt;และstd::unordered_map&lt;Key, Value&gt; ต้องระบุoperator==(Key, Key)และแฮช functor: struct X { int id; /* ... */ }; bool operator==(X a, X b) { return a.id == b.id; } struct MyHash { size_t operator()(const X&amp; x) const { return std::hash&lt;int&gt;()(x.id); } }; std::unordered_set&lt;X, MyHash&gt; s; จะสะดวกกว่าในการเขียนstd::unordered_set&lt;X&gt; โดยใช้แฮชเริ่มต้นสำหรับประเภทXเช่นประเภทที่มาพร้อมกับคอมไพเลอร์และไลบรารี หลังจากปรึกษา C ++ Standard Draft N3242 §20.8.12 …

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