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

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

3
อะไรคือความแตกต่างระหว่าง packaged_task และ async
ในขณะที่ทำงานกับโมเดลเธรดของ C ++ 11 ฉันสังเกตเห็นว่า std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; }); auto f = task.get_future(); task(2,3); std::cout << f.get() << '\n'; และ auto f = std::async(std::launch::async, [](int a, int b) { return a + b; }, 2, 3); std::cout << f.get() << '\n'; ดูเหมือนจะทำในสิ่งเดียวกัน ฉันเข้าใจว่าอาจมีความแตกต่างที่สำคัญถ้าฉันวิ่งไปstd::asyncด้วยstd::launch::deferredแต่ในกรณีนี้มีไหม …

4
เป็นไปได้หรือไม่ที่จะหาประเภทพารามิเตอร์และประเภทผลตอบแทนของแลมด้า
เมื่อพิจารณาแลมบ์ดาเป็นไปได้ไหมที่จะหาประเภทพารามิเตอร์และประเภทการส่งคืน ถ้าใช่อย่างไร โดยพื้นฐานแล้วฉันต้องการlambda_traitsที่สามารถใช้ในรูปแบบต่อไปนี้: auto lambda = [](int i) { return long(i*10); }; lambda_traits<decltype(lambda)>::param_type i; //i should be int lambda_traits<decltype(lambda)>::return_type l; //l should be long แรงจูงใจเบื้องหลังคือฉันต้องการใช้lambda_traitsในเทมเพลตฟังก์ชันซึ่งยอมรับแลมบ์ดาเป็นอาร์กิวเมนต์และฉันจำเป็นต้องรู้ว่าเป็นประเภทพารามิเตอร์และประเภทผลตอบแทนภายในฟังก์ชัน: template<typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; //I want to do this! //... } …

4
ฉันจะเลือกคอนเทนเนอร์ไลบรารีมาตรฐานใน C ++ 11 อย่างมีประสิทธิภาพได้อย่างไร
มีรูปภาพที่รู้จักกันดี (ข้อมูลโกง) ที่เรียกว่า "C ++ Container choice" เป็นผังงานเพื่อเลือกภาชนะที่ดีที่สุดสำหรับการใช้งานที่ต้องการ มีใครรู้บ้างว่ามีเวอร์ชัน C ++ 11 อยู่แล้วหรือไม่? นี่คือรายการก่อนหน้า:
136 c++  c++11  c++-faq 

10
C ++ 0x ไม่มี semaphores? จะซิงโครไนซ์เธรดได้อย่างไร?
C ++ 0x จะมาโดยไม่มี semaphores จริงหรือ? มีคำถามบางอย่างเกี่ยวกับ Stack Overflow เกี่ยวกับการใช้ semaphores อยู่แล้ว ฉันใช้มัน (posix semaphores) ตลอดเวลาเพื่อให้เธรดรอเหตุการณ์บางอย่างในเธรดอื่น: void thread0(...) { doSomething0(); event1.wait(); ... } void thread1(...) { doSomething1(); event1.post(); ... } ถ้าฉันจะทำแบบนั้นกับ mutex: void thread0(...) { doSomething0(); event1.lock(); event1.unlock(); ... } void thread1(...) { event1.lock(); doSomethingth1(); event1.unlock(); ... } ปัญหา: มันน่าเกลียดและไม่รับประกันว่า …

16
ตรวจสอบว่าคลาสมีฟังก์ชันสมาชิกของลายเซ็นที่กำหนดหรือไม่
ฉันกำลังขอเคล็ดลับเทมเพลตเพื่อตรวจสอบว่าชั้นเรียนมีฟังก์ชันสมาชิกเฉพาะของลายเซ็นที่กำหนดหรือไม่ ปัญหาคล้ายกับที่อ้างถึงที่นี่ http://www.gotw.ca/gotw/071.htm แต่ไม่เหมือนกัน: ในรายการหนังสือของซัตเทอร์เขาตอบคำถามที่คลาส C ต้องให้ฟังก์ชันสมาชิกด้วย ลายเซ็นเฉพาะมิฉะนั้นโปรแกรมจะไม่รวบรวม ในปัญหาของฉันฉันต้องทำอะไรบางอย่างถ้าคลาสมีฟังก์ชันนั้นให้ทำ "อย่างอื่น" ประสบปัญหาที่คล้ายกันโดย boost :: serialization แต่ฉันไม่ชอบวิธีแก้ปัญหาที่พวกเขานำมาใช้: ฟังก์ชันเทมเพลตที่เรียกใช้ฟังก์ชันฟรี (ที่คุณต้องกำหนด) โดยค่าเริ่มต้นด้วยลายเซ็นเฉพาะเว้นแต่คุณจะกำหนดฟังก์ชันสมาชิกเฉพาะ ( ในกรณีของพวกเขา "ทำให้เป็นอนุกรม" ที่ใช้พารามิเตอร์ 2 ตัวในประเภทที่กำหนด) โดยมีลายเซ็นเฉพาะมิฉะนั้นข้อผิดพลาดในการคอมไพล์จะเกิดขึ้น นั่นคือการใช้การทำให้เป็นอนุกรมทั้งแบบล่วงล้ำและไม่ล่วงล้ำ ฉันไม่ชอบวิธีแก้ปัญหานั้นด้วยเหตุผลสองประการ: เพื่อไม่ล่วงล้ำคุณต้องแทนที่ฟังก์ชัน "serialize" ทั่วโลกที่อยู่ใน boost :: serialization namespace ดังนั้นคุณจึงมีรหัสลูกค้าของคุณเพื่อเปิดการเพิ่มเนมสเปซและการทำให้เป็นอนุกรมเนมสเปซ! สแต็กเพื่อแก้ไขปัญหานั้นคือการเรียกใช้ฟังก์ชัน 10 ถึง 12 ฉันต้องการกำหนดพฤติกรรมที่กำหนดเองสำหรับคลาสที่ไม่มีฟังก์ชันสมาชิกนั้นและเอนทิตีของฉันอยู่ภายในเนมสเปซที่แตกต่างกัน (และฉันไม่ต้องการแทนที่ฟังก์ชันส่วนกลางที่กำหนดไว้ในเนมสเปซเดียวในขณะที่ฉันอยู่ในอีกอันหนึ่ง) คุณช่วยไขปริศนานี้ให้ฉันได้ไหม
135 c++  c++11  templates  sfinae 

6
ฉันจะใช้ deleter ที่กำหนดเองกับสมาชิก std :: unique_ptr ได้อย่างไร
ฉันมีชั้นเรียนที่มีสมาชิก unique_ptr class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar เป็นคลาสของบุคคลที่สามที่มีฟังก์ชัน create () และฟังก์ชัน destroy () หากฉันต้องการใช้ a std::unique_ptrร่วมกับมันในฟังก์ชันสแตนด์อโลนฉันสามารถทำได้: void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } มีวิธีดำเนินการในstd::unique_ptrฐานะสมาชิกของชั้นเรียนหรือไม่?


1
อะไรคือความแตกต่างระหว่าง -std = c ++ 11 และ -std = gnu ++ 11?
อะไรคือความแตกต่างระหว่าง-std=c++11และ-std=gnu++11เป็นพารามิเตอร์การคอมไพล์สำหรับ gcc และ clang? คำถามเดียวกันกับc99และgnu99? ฉันรู้เกี่ยวกับมาตรฐาน C ++ และ C มันคือความแตกต่างของพารามิเตอร์ที่ฉันสนใจ ฉันได้อ่านบางแห่งที่เกี่ยวข้องกับส่วนขยายบางอย่าง แต่ไม่ชัดเจนสำหรับฉันว่าส่วนขยายใดและจะเลือกระหว่างอันใดอันหนึ่งสำหรับโปรเจ็กต์ใหม่
132 c++  gcc  c++11  clang 

3
thread_local หมายถึงอะไรใน C ++ 11
ฉันสับสนกับคำอธิบายthread_localใน C ++ 11 ความเข้าใจของฉันคือแต่ละเธรดมีสำเนาเฉพาะของตัวแปรท้องถิ่นในฟังก์ชัน ตัวแปรส่วนกลาง / คงที่สามารถเข้าถึงได้โดยเธรดทั้งหมด (อาจซิงโครไนซ์การเข้าถึงโดยใช้การล็อก) และthread_localตัวแปรสามารถมองเห็นได้สำหรับเธรดทั้งหมด แต่สามารถแก้ไขได้โดยเธรดที่กำหนดไว้เท่านั้น? ถูกต้องหรือไม่

10
การรวมเธรดใน C ++ 11
คำถามที่เกี่ยวข้อง : เกี่ยวกับ C ++ 11: C ++ 11: std :: เธรดรวม? async (เปิดตัว :: async) ใน C ++ 11 จะทำให้เธรดพูลล้าสมัยเพื่อหลีกเลี่ยงการสร้างเธรดที่มีราคาแพงหรือไม่ เกี่ยวกับ Boost: C ++ เพิ่มเธรดใช้เธรดซ้ำ เพิ่ม :: เธรดและสร้างกลุ่มของพวกเขา! ฉันจะได้รับกลุ่มเธรดเพื่อส่งงานโดยไม่ต้องสร้างและลบซ้ำแล้วซ้ำอีกได้อย่างไร ซึ่งหมายความว่าเธรดแบบถาวรจะซิงโครไนซ์ใหม่โดยไม่ต้องเข้าร่วม ฉันมีรหัสที่มีลักษณะดังนี้: namespace { std::vector<std::thread> workers; int total = 4; int arr[4] = {0}; void each_thread_does(int i) { arr[i] += …

4
ความแตกต่างระหว่าง std :: make_unique และ std :: unique_ptr กับ new
ไม่std::make_uniqueได้มีผลประโยชน์ใด ๆ เช่นประสิทธิภาพstd::make_shared? เมื่อเทียบกับการสร้างด้วยตนเองstd::unique_ptr: std::make_unique<int>(1); // vs std::unique_ptr<int>(new int(1));

6
เหตุใด std :: shared_ptr <void> จึงทำงาน
ฉันพบรหัสบางส่วนโดยใช้ std :: shared_ptr เพื่อทำการล้างข้อมูลโดยพลการเมื่อปิดเครื่อง ตอนแรกฉันคิดว่ารหัสนี้อาจใช้งานไม่ได้ แต่ฉันลองทำสิ่งต่อไปนี้: #include &lt;memory&gt; #include &lt;iostream&gt; #include &lt;vector&gt; class test { public: test() { std::cout &lt;&lt; "Test created" &lt;&lt; std::endl; } ~test() { std::cout &lt;&lt; "Test destroyed" &lt;&lt; std::endl; } }; int main() { std::cout &lt;&lt; "At begin of main.\ncreating std::vector&lt;std::shared_ptr&lt;void&gt;&gt;" &lt;&lt; std::endl; std::vector&lt;std::shared_ptr&lt;void&gt;&gt; v; …
129 c++  c++11  shared-ptr 

4
std :: function และ std :: bind: คืออะไรและควรใช้เมื่อใด
ฉันรู้ว่าสิ่ง functors และเมื่อจะใช้พวกเขาด้วยstdอัลกอริทึม แต่ฉันยังไม่เข้าใจสิ่งที่ Stroustrup กล่าวเกี่ยวกับพวกเขาในC ++ 11 คำถามที่พบบ่อย ทุกคนสามารถอธิบายสิ่งที่std::bindและstd::functionเป็นเมื่อพวกเขาควรจะนำมาใช้และให้ตัวอย่างสำหรับมือใหม่?


2
ตัวดำเนินการลูกศร (->) ในส่วนหัวของฟังก์ชัน
ฉันเจอรหัสต่อไปนี้: template &lt;typename T, typename T1&gt; auto compose(T a, T1 b) -&gt; decltype(a + b) { return a+b; } มีสิ่งหนึ่งที่ฉันไม่เข้าใจ: ฉันจะทราบได้อย่างไรว่าตัวดำเนินการลูกศร ( -&gt;) หมายถึงอะไรในส่วนหัวของฟังก์ชัน ฉันเดาด้วยเหตุผลล้วนๆว่า-&gt;โอเปอเรเตอร์กำหนดประเภทซึ่งautoจะอนุมานได้ แต่ฉันต้องการตรงนี้ ฉันไม่พบข้อมูลใด ๆ
129 c++  c++11  auto  decltype 

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