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

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

1
ตรรกะเบื้องหลังคำหลัก "ใช้" ใน C ++ คืออะไร?
ตรรกะเบื้องหลังคำหลัก "ใช้" ใน C ++ คืออะไร? มันถูกใช้ในสถานการณ์ที่แตกต่างกันและฉันกำลังพยายามค้นหาว่าสิ่งเหล่านี้มีบางอย่างที่เหมือนกันหรือไม่และมีเหตุผลว่าทำไมจึงใช้คีย์เวิร์ด "ใช้" เช่นนี้ using namespace std; // to import namespace in the current namespace using T = int; // type alias using SuperClass::X; // using super class methods in derived class
155 c++  c++11 

8
ปรับแต่ง“ ในขณะที่ (1);” ใน C ++ 0x
อัปเดตดูด้านล่าง! ฉันเคยได้ยินและอ่านว่า C ++ 0x อนุญาตให้คอมไพเลอร์พิมพ์ "Hello" สำหรับตัวอย่างต่อไปนี้ #include <iostream> int main() { while(1) ; std::cout << "Hello" << std::endl; } เห็นได้ชัดว่ามีบางอย่างเกี่ยวข้องกับเธรดและความสามารถในการปรับให้เหมาะสม ฉันคิดว่ามันน่าแปลกใจที่หลาย ๆ คนคิดว่า บางคนมีคำอธิบายที่ดีว่าเหตุใดจึงจำเป็นต้องอนุญาต สำหรับการอ้างอิง C ++ 0x ฉบับร่างล่าสุดระบุไว้ที่6.5/5 ลูปที่นอกเหนือจากคำสั่ง for-init ในกรณีของคำสั่ง for ไม่เรียกใช้ฟังก์ชันห้องสมุด I / O และ ไม่สามารถเข้าถึงหรือแก้ไขวัตถุที่ระเหยได้และ ไม่มีการดำเนินการซิงโครไนซ์ (1.10) หรือการดำเนินการปรมาณู (ข้อ 29) อาจถูกสันนิษฐานโดยการนำไปปฏิบัติเพื่อยุติ [หมายเหตุ: สิ่งนี้มีจุดประสงค์เพื่อให้การแปลงคอมไพเลอร์เช่นการลบลูปที่ว่างเปล่าแม้ว่าจะไม่สามารถพิสูจน์ได้ว่าการเลิกจ้าง - …

7
มันฉลาดที่จะแทนที่บูสต์ :: thread และ boost :: mutex ด้วย c ++ 11 เทียบเท่าหรือไม่?
แรงจูงใจ: เหตุผลที่ฉันคิดว่าผู้จัดการโครงการอัจฉริยะของฉันคิดว่าการเพิ่มเป็นอีกการพึ่งพาและมันน่ากลัวเพราะ "คุณขึ้นอยู่กับมัน" (ฉันพยายามอธิบายคุณภาพของการส่งเสริมแล้วเลิกหลังจากนั้นสักครู่ :( ) เหตุผลที่เล็กกว่าที่ฉันต้องการทำคือฉันต้องการเรียนรู้คุณสมบัติ c ++ 11 เพราะผู้คนจะเริ่มเขียนโค้ดลงไปดังนั้น: มีการแมป 1: 1 ระหว่าง#include<thread> #include<mutex>และเพิ่มการเทียบเท่าหรือไม่ คุณจะพิจารณาความคิดที่ดีที่จะเปลี่ยนสิ่งที่เพิ่มด้วย C ++ 11 สิ่ง การใช้งานของฉันเป็นพื้นฐาน แต่มีตัวอย่างเมื่อ std ไม่เสนอเพิ่มอะไรบ้าง หรือ (ดูหมิ่น) ในทางกลับกัน? PS ฉันใช้ GCC ดังนั้นส่วนหัวจึงอยู่ที่นั่น

6
เกิดอะไรขึ้นกับเธรดที่แยกออกเมื่อ main () ออกมา
สมมติว่าฉันเริ่มต้นstd::threadและจากนั้นdetach()เธรดจึงยังคงดำเนินการต่อแม้ว่าสิ่งstd::threadนั้นจะเป็นตัวแทนของมันก็ตาม สมมติเพิ่มเติมว่าโปรแกรมไม่มีโพรโทคอลที่เชื่อถือได้สำหรับการเข้าร่วมเธรดที่ดึงออก1ดังนั้นเธรดที่แยกออกมายังคงทำงานเมื่อmain()ออกจาก ฉันไม่พบสิ่งใดในมาตรฐาน (แม่นยำกว่าในร่าง N3797 C ++ 14) ซึ่งอธิบายสิ่งที่ควรเกิดขึ้นทั้ง 1.10 และ 30.3 ไม่มีถ้อยคำที่เกี่ยวข้อง 1อีกคำถามที่อาจเทียบเท่ากันคือ: "สามารถรวมเธรดที่แยกออกมาได้อีกครั้ง" เนื่องจากโปรโตคอลใดก็ตามที่คุณคิดค้นเพื่อเข้าร่วมส่วนการส่งสัญญาณจะต้องทำในขณะที่เธรดยังทำงานอยู่และตัวกำหนดตารางเวลาระบบปฏิบัติการอาจ ตัดสินใจที่จะทำให้เธรดเข้าสู่โหมดสลีปเป็นเวลาหนึ่งชั่วโมงหลังจากดำเนินการส่งสัญญาณโดยไม่มีวิธีสำหรับการสิ้นสุดการรับเพื่อตรวจสอบความน่าเชื่อถือของเธรดที่เสร็จสิ้น ถ้าวิ่งออกมาจากmain()กับหัวข้อแฝดทำงานเป็นพฤติกรรมที่ไม่ได้กำหนดไว้แล้วใด ๆ ที่ใช้std::thread::detach()เป็นพฤติกรรมที่ไม่ได้กำหนดเว้นแต่หัวข้อหลักไม่เคยออกจาก2 ดังนั้นการรันmain()เธรดที่แยกออกมาจะต้องมีเอฟเฟกต์ที่กำหนดไว้ คำถามคือ: ที่ไหน (ในมาตรฐาน C ++ , ไม่ใช่ POSIX, ไม่ใช่ OS เอกสาร, ... ) เป็นเอฟเฟกต์เหล่านั้นที่กำหนดไว้ 2ไม่สามารถเข้าร่วมเธรดเดี่ยวได้ (ในแง่ของstd::thread::join()) คุณสามารถรอผลจากหัวข้อแฝด (เช่นผ่านทางในอนาคตจากstd::packaged_taskหรือโดยสัญญาณการนับหรือธงและตัวแปรสภาพ) แต่ที่ไม่ได้รับประกันว่าด้ายได้เสร็จสิ้นการดำเนินการ อันที่จริงถ้าคุณใส่ส่วนการส่งสัญญาณเข้าไปในเตาเผาของวัตถุอัตโนมัติครั้งแรกของด้ายที่มีจะโดยทั่วไปจะเป็นรหัส (destructors) ที่ระยะหลังรหัสการส่งสัญญาณ หากระบบปฏิบัติการจัดตารางเวลาเธรดหลักเพื่อใช้ผลลัพธ์และออกก่อนที่เธรดที่แยกออกจะเสร็จสิ้นการรัน destructors ที่กล่าวไว้สิ่งใดที่ ^ Wis จะนิยามไว้จะเกิดอะไรขึ้น

6
ทำไมฉันถึงต้อง std :: ย้าย std :: shared_ptr?
ฉันได้อ่านซอร์สโค้ดของ Clangแล้วและฉันพบข้อมูลโค้ดนี้: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } ทำไมฉันจะต้องการที่จะ?std::movestd::shared_ptr มีจุดใดที่ถ่ายโอนความเป็นเจ้าของในทรัพยากรที่ใช้ร่วมกันหรือไม่ ทำไมฉันจะไม่ทำเช่นนี้แทน? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

1
จะเกิดอะไรขึ้นถ้าคุณ static_cast ค่าที่ไม่ถูกต้องใน enum class?
พิจารณารหัส C ++ 11 นี้: enum class Color : char { red = 0x1, yellow = 0x2 } // ... char *data = ReadFile(); Color color = static_cast<Color>(data[0]); สมมติว่าข้อมูล [0] เป็น 100 จริง ๆ สีใดที่ตั้งค่าตามมาตรฐาน? โดยเฉพาะถ้าฉันทำในภายหลัง switch (color) { // ... red and yellow cases omitted default: // handle error …
146 c++  c++11 

5
iota ของ std :: iota หมายถึงอะไร
ฉันสมมติว่า "i" เพิ่มขึ้นและ "a" ได้รับมอบหมาย แต่ฉันไม่สามารถหาคำตอบได้ มันดูคล้ายกับที่ไม่ได้มาตรฐานitoaซึ่งฉันคิดว่ามันสับสน

4
การใช้ตัวแปรสมาชิกในรายการจับแลมบ์ดาภายในฟังก์ชันสมาชิก
โค้ดต่อไปนี้คอมไพล์ด้วย gcc 4.5.1 แต่ไม่ใช่กับ VS2010 SP1: #include <iostream> #include <vector> #include <map> #include <utility> #include <set> #include <algorithm> using namespace std; class puzzle { vector<vector<int>> grid; map<int,set<int>> groups; public: int member_function(); }; int puzzle::member_function() { int i; for_each(groups.cbegin(),groups.cend(),[grid,&i](pair<int,set<int>> group){ i++; cout<<i<<endl; }); } int main() { return 0; } นี่เป็นข้อผิดพลาด: …

7
คำหลักอัตโนมัติ C ++ ทำไมมันมหัศจรรย์?
จากวัสดุทั้งหมดที่ฉันใช้ในการเรียนรู้ C ++ autoเป็นตัวระบุระยะเวลาเก็บข้อมูลแปลก ๆ ที่ไม่ได้มีจุดประสงค์เสมอ แต่เมื่อเร็ว ๆ นี้ฉันพบรหัสที่ใช้มันเป็นชื่อประเภทในและของตัวเอง ฉันลองมันด้วยความอยากรู้และมันจะเป็นประเภทของสิ่งที่ฉันจะกำหนดให้มัน! ทันใดนั้นตัววนซ้ำ STL และอะไรก็ได้ที่ใช้แม่แบบนั้นเขียนได้ง่ายกว่า 10 เท่า รู้สึกเหมือนฉันกำลังใช้ภาษา 'สนุก' เช่น Python คำหลักนี้อยู่ที่ไหนทั้งชีวิตของฉัน คุณจะรีบฝันของฉันโดยบอกว่ามันเป็นเอกสิทธิ์ของสตูดิโอภาพหรือไม่พกพา?
145 c++  types  c++11  auto 

12
ทำไมทุกคนจะใช้ชุดแทน unordered_set
C ++ 0x กำลังแนะนำunordered_setซึ่งมีอยู่ในboostและที่อื่น ๆ อีกมากมาย สิ่งที่ฉันเข้าใจคือunordered_setตารางแฮชที่มีO(1)ความซับซ้อนในการค้นหา ในทางตรงกันข้ามsetไม่มีอะไรเลยนอกจากต้นไม้ที่มีlog(n)ความซับซ้อนในการค้นหา ทำไมทุกคนบนโลกจะใช้setแทนunordered_set? เช่นมีความต้องการsetอีกต่อไปหรือไม่

13
ฉันจะขยายทูเพิลเป็นอาร์กิวเมนต์ของฟังก์ชันเทมเพลตตัวแปรได้อย่างไร
พิจารณากรณีของฟังก์ชันเทมเพลตที่มีอาร์กิวเมนต์แม่แบบตัวแปร: template<typename Tret, typename... T> Tret func(const T&... t); ตอนนี้ผมมีขอบเขตของtของค่า ฉันจะเรียกfunc()ใช้ค่าทูเพิลเป็นอาร์กิวเมนต์ได้อย่างไร ฉันได้อ่านเกี่ยวกับbind()วัตถุฟังก์ชันพร้อมcall()ฟังก์ชันและapply()ฟังก์ชันในเอกสารอื่น ๆ ที่ล้าสมัยในปัจจุบัน การใช้งาน GNU GCC 4.4 ดูเหมือนจะมีcall()ฟังก์ชันในbind()คลาสนี้ แต่มีเอกสารประกอบเกี่ยวกับเรื่องนี้น้อยมาก บางคนแนะนำให้ใช้แฮ็กแบบเรียกซ้ำที่เขียนด้วยมือ แต่มูลค่าที่แท้จริงของอาร์กิวเมนต์แม่แบบตัวแปรคือสามารถใช้ได้ในกรณีเช่นข้างต้น ใครมีวิธีแก้คือหรือบอกใบ้ว่าจะอ่านได้ที่ไหน
145 c++  c++11  arguments  tuples 

5
ไวยากรณ์ใหม่“ = default” ใน C ++ 11
ฉันไม่เข้าใจว่าทำไมฉันถึงทำสิ่งนี้: struct S { int a; S(int aa) : a(aa) {} S() = default; }; ทำไมไม่พูดว่า: S() {} // instead of S() = default; ทำไมต้องนำไวยากรณ์ใหม่มาใช้
144 c++  c++11 

14
มีข้อเสียในการประกาศตัวแปรที่มี auto ใน C ++ หรือไม่
ดูเหมือนว่าautoเป็นคุณสมบัติที่มีความสำคัญพอสมควรที่จะเพิ่มใน C ++ 11 ที่ดูเหมือนว่าจะเป็นไปตามภาษาที่ใหม่กว่ามากมาย เช่นเดียวกับภาษาอย่าง Python ฉันไม่เคยเห็นการประกาศตัวแปรที่ชัดเจน (ฉันไม่แน่ใจว่ามันเป็นไปได้โดยใช้มาตรฐาน Python หรือไม่) มีข้อเสียเปรียบในการใช้autoประกาศตัวแปรแทนที่จะประกาศอย่างชัดเจนหรือไม่?

10
วัตถุประสงค์ของคำหลัก“ สุดท้าย” ใน C ++ 11 สำหรับฟังก์ชั่นคืออะไร?
วัตถุประสงค์ของfinalคำสำคัญใน C ++ 11 สำหรับฟังก์ชั่นคืออะไร? ฉันเข้าใจว่ามันป้องกันการแทนที่ฟังก์ชั่นโดยคลาสที่ได้รับ แต่ถ้าเป็นกรณีนี้มันไม่เพียงพอที่จะประกาศว่าไม่ใช่finalฟังก์ชันของคุณใช่หรือไม่ มีสิ่งอื่นอีกไหมที่ฉันหายไปที่นี่
143 c++  c++11  final 

14
ฟังก์ชัน lambda แบบเรียกซ้ำใน C ++ 11
ฉันใหม่กับ C ++ 11 ฉันกำลังเขียนฟังก์ชั่นแลมบ์ดาแบบเรียกซ้ำ แต่มันไม่ได้รวบรวม sum.cpp #include <iostream> #include <functional> auto term = [](int a)->int { return a*a; }; auto next = [](int a)->int { return ++a; }; auto sum = [term,next,&sum](int a, int b)mutable ->int { if(a>b) return 0; else return term(a) + sum(next(a),b); }; int main(){ std::cout<<sum(1,10)<<std::endl; …
143 c++  c++11  lambda 

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