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

C ++ เป็นภาษาโปรแกรมทั่วไป เดิมได้รับการออกแบบให้เป็นส่วนขยายของ C และมีไวยากรณ์ที่คล้ายกัน แต่ตอนนี้มันเป็นภาษาที่แตกต่างอย่างสิ้นเชิง ใช้แท็กนี้สำหรับคำถามเกี่ยวกับรหัส (จะ) คอมไพล์ด้วยคอมไพเลอร์ C ++ ใช้แท็กเฉพาะรุ่นสำหรับคำถามที่เกี่ยวข้องกับการแก้ไขมาตรฐานเฉพาะ [C ++ 11], [C ++ 14], [C ++ 17] หรือ [C ++ 20] เป็นต้น


9
ตัวอย่าง C ++ SFINAE?
ฉันต้องการเข้าสู่การเขียนโปรแกรมเมตาเทมเพลตเพิ่มเติม ฉันรู้ว่า SFINAE ย่อมาจาก "ความล้มเหลวในการทดแทนไม่ใช่ข้อผิดพลาด" แต่ใครช่วยบอกวิธีใช้ SFINAE ให้ฉันดูหน่อยได้ไหม

13
วิธีการไดรฟ์ C #, C ++ หรือคอมไพเลอร์ Java เพื่อคำนวณ 1 + 2 + 3 + ... + 1000 ในเวลาคอมไพล์?
ในการสัมภาษณ์ล่าสุดฉันถูกถามคำถามแปลก ๆ ผู้สัมภาษณ์ถามฉันว่าฉันจะคำนวณ 1 + 2 + 3 + ... + 1000 โดยใช้คุณสมบัติคอมไพเลอร์ได้อย่างไร ซึ่งหมายความว่าฉันไม่ได้รับอนุญาตให้เขียนโปรแกรมและเรียกใช้งาน แต่ฉันควรเขียนโปรแกรมที่สามารถขับเคลื่อนคอมไพเลอร์ให้คำนวณผลรวมนี้ในขณะที่คอมไพล์และพิมพ์ผลลัพธ์เมื่อการคอมไพล์เสร็จสิ้น เขาบอกฉันว่าฉันอาจใช้ generics และคุณสมบัติ pre-processor ของคอมไพเลอร์ เป็นไปได้ที่จะใช้คอมไพเลอร์ C ++, C # หรือ Java ความคิดใด ๆ ??? คำถามนี้ไม่เกี่ยวข้องกับการคำนวณผลรวมโดยไม่มีการวนซ้ำใด ๆ ที่ถามที่นี่ นอกจากนี้ควรสังเกตว่าควรคำนวณผลรวมระหว่างการคอมไพล์ ไม่สามารถพิมพ์เฉพาะผลลัพธ์โดยใช้คำสั่งคอมไพเลอร์ C ++ อ่านข้อมูลเพิ่มเติมเกี่ยวกับคำตอบโพสต์ที่ฉันพบว่าการแก้ปัญหาที่เกิดขึ้นในระหว่างการรวบรวมโดยใช้ C ++ แม่แบบที่เรียกว่าmetaprogramming นี่เป็นเทคนิคที่ดร. เออร์วินอุนรูห์ค้นพบโดยบังเอิญระหว่างกระบวนการสร้างมาตรฐานภาษา C ++ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับหัวข้อนี้ในหน้าวิกิพีเดียของ meta-การเขียนโปรแกรม ดูเหมือนว่าจะสามารถเขียนโปรแกรมใน Java โดยใช้คำอธิบายประกอบจาวา …

10
การใช้งาน stack และ heap ที่เหมาะสมใน C ++?
ฉันเขียนโปรแกรมมาระยะหนึ่งแล้ว แต่ส่วนใหญ่เป็น Java และ C # ฉันไม่เคยต้องจัดการหน่วยความจำด้วยตัวเองเลย ฉันเพิ่งเริ่มเขียนโปรแกรมใน C ++ และฉันรู้สึกสับสนเล็กน้อยว่าเมื่อใดที่ฉันควรจัดเก็บสิ่งต่างๆบนสแต็กและเมื่อใดที่จะเก็บไว้ในฮีป ความเข้าใจของฉันคือตัวแปรที่ถูกเข้าถึงบ่อยมากควรถูกเก็บไว้ในสแต็กและอ็อบเจกต์ตัวแปรที่ไม่ค่อยได้ใช้และโครงสร้างข้อมูลขนาดใหญ่ทั้งหมดควรถูกเก็บไว้ในฮีป นี่ถูกต้องหรือฉันไม่ถูกต้อง?

8
จะโยนข้อยกเว้น std :: ด้วยข้อความตัวแปรได้อย่างไร
นี่คือตัวอย่างของสิ่งที่ฉันมักจะทำเมื่อต้องการเพิ่มข้อมูลบางอย่างในข้อยกเว้น: std::stringstream errMsg; errMsg << "Could not load config file '" << configfile << "'"; throw std::exception(errMsg.str().c_str()); มีวิธีที่ดีกว่าในการทำหรือไม่?

6
ข้อผิดพลาด: การใช้ฟังก์ชันที่ถูกลบ
ฉันทำงานกับรหัส C ++ ที่เพื่อนเขียนและได้รับข้อผิดพลาดต่อไปนี้ที่ฉันไม่เคยเห็นมาก่อนเมื่อคอมไพล์กับ gcc4.6: error: use of deleted function ‘GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()’ is implicitly deleted because the default definition would be ill-formed: uninitialized non-static const member ‘const h_t FlopPokerGameFSM_<std::array<C, 2ul> >::hdealt::h’ แก้ไข: สิ่งนี้มาจากส่วนหนึ่งของโค้ดโดยใช้ boost MSM: Boost Webpage แก้ไข 2: ไม่มีการ= delete()ใช้ที่ใดก็ได้ในซอร์สโค้ด โดยทั่วไปแล้วข้อผิดพลาดนี้หมายถึงอะไร? ฉันควรมองหาอะไรเมื่อเกิดข้อผิดพลาดประเภทนี้

3
polymorphic_allocator: ฉันควรใช้เมื่อใดและทำไม
นี่เป็นวิธีการในcppreference , นี่คือร่างการทำงาน ฉันต้องยอมรับว่าฉันไม่เข้าใจว่าจุดประสงค์ที่แท้จริงคืออะไรpolymorphic_allocatorและเมื่อไหร่ / ทำไม / ฉันควรใช้มันอย่างไร ตัวอย่างเช่นpmr::vectorมีลายเซ็นดังต่อไปนี้: namespace pmr { template <class T> using vector = std::vector<T, polymorphic_allocator<T>>; } อะไรpolymorphic_allocatorข้อเสนอ? std::pmr::vectorข้อเสนออะไรเช่นกันในเรื่องของสมัยเก่าstd::vector? ฉันจะทำอะไรได้บ้างที่ฉันไม่สามารถทำได้จนถึงตอนนี้? วัตถุประสงค์ที่แท้จริงของผู้จัดสรรนั้นคืออะไรและเมื่อใดที่ฉันควรใช้จริง?
122 c++  allocator  c++17 

3
การใช้ if (0) เพื่อข้ามเคสในสวิตช์ควรจะใช้งานได้หรือไม่?
ฉันมีสถานการณ์ที่ฉันต้องการสองกรณีในคำสั่งสลับ C ++ ให้ทั้งสองตกไปอยู่ในกรณีที่สาม โดยเฉพาะกรณีที่สองจะตกไปสู่กรณีที่สามและกรณีแรกก็จะตกไปสู่กรณีที่สามโดยไม่ผ่านกรณีที่สอง ฉันมีความคิดโง่ ๆ ลองทำดูและได้ผล! ฉันห่อกรณีที่สองใน...if (0) { }ดูเหมือนว่า: #ifdef __cplusplus # include <cstdio> #else # include <stdio.h> #endif int main(void) { for (int i = 0; i < 3; i++) { printf("%d: ", i); switch (i) { case 0: putchar('a'); // @fallthrough@ if (0) { // …

8
Qt Creator - Project ERROR: Xcode ไม่ได้ตั้งค่าอย่างถูกต้อง คุณอาจต้องยืนยันข้อตกลงสิทธิ์การใช้งานโดยเรียกใช้ / usr / bin / xcodebuild
ฉันเพิ่งติดตั้ง Qt 5.5 และใช้ Qt Creator เป็นครั้งแรกบน OS X เมื่อฉันติดตั้ง Qt ครั้งแรกมันทำให้ฉันมีข้อความแสดงข้อผิดพลาด 'Xcode 5 not installed' ซึ่งฉันคิดว่ามันแปลก (ฉันมี Xcode 7 beta) แต่การติดตั้งเสร็จสมบูรณ์แล้วอย่างไรก็ตาม ตอนนี้เมื่อฉันเริ่มหรือเปิดโครงการฉันได้รับข้อผิดพลาด: ข้อผิดพลาดของโครงการ: ตั้งค่า Xcode ไม่ถูกต้อง คุณอาจต้องยืนยันข้อตกลงสิทธิ์การใช้งานโดยเรียกใช้ / usr / bin / xcodebuild เมื่อฉันทำงาน/usr/bin/xcodebuildใน Terminal ฉันจะได้รับสิ่งต่อไปนี้: xcode-select: ข้อผิดพลาด: เครื่องมือ 'xcodebuild' ต้องการ Xcode แต่ไดเรกทอรีของนักพัฒนาที่ใช้งานอยู่ '/ Library / Developer / CommandLineTools' …
121 c++  xcode  macos  qt  qt-creator 

3
มีการใช้งานตัวชี้อัจฉริยะ C ++ อะไรบ้าง?
การเปรียบเทียบข้อดีข้อเสียและเมื่อใดควรใช้? นี่คือการแยกออกจากเธรดการรวบรวมขยะที่สิ่งที่ฉันคิดว่าเป็นคำตอบง่ายๆสร้างความคิดเห็นจำนวนมากเกี่ยวกับการใช้งานตัวชี้อัจฉริยะบางอย่างดังนั้นจึงดูเหมือนว่าคุ้มค่าที่จะเริ่มโพสต์ใหม่ ในที่สุดคำถามคือการใช้งานตัวชี้อัจฉริยะใน C ++ มีอะไรบ้างและเปรียบเทียบกันอย่างไร ข้อดีข้อเสียหรือข้อยกเว้นง่ายๆเพียงอย่างเดียวและเข้าถึงสิ่งที่คุณอาจคิดว่าน่าจะใช้ได้ผล ฉันได้โพสต์การใช้งานบางอย่างที่ฉันเคยใช้หรืออย่างน้อยก็ปัดสวะและพิจารณาว่าใช้เป็นคำตอบด้านล่างและฉันเข้าใจถึงความแตกต่างและความคล้ายคลึงกันซึ่งอาจไม่ถูกต้อง 100% ดังนั้นอย่าลังเลที่จะตรวจสอบข้อเท็จจริงหรือแก้ไขฉันตามความจำเป็น เป้าหมายคือเพื่อเรียนรู้เกี่ยวกับออบเจ็กต์และไลบรารีใหม่ ๆ หรือแก้ไขการใช้งานของฉันและความเข้าใจเกี่ยวกับการใช้งานที่มีอยู่แล้วซึ่งใช้กันอย่างแพร่หลายและจบลงด้วยการอ้างอิงที่เหมาะสมสำหรับผู้อื่น

13
การค้นหารายการที่ซ้ำกันในเวลา O (n) และช่องว่าง O (1)
อินพุต: กำหนดอาร์เรย์ขององค์ประกอบ n ซึ่งมีองค์ประกอบตั้งแต่ 0 ถึง n-1 โดยตัวเลขเหล่านี้จะปรากฏกี่ครั้งก็ได้ เป้าหมาย: เพื่อค้นหาตัวเลขที่เกิดซ้ำเหล่านี้ใน O (n) และใช้พื้นที่หน่วยความจำคงที่เท่านั้น ตัวอย่างเช่นให้ n เป็น 7 และอาร์เรย์เป็น {1, 2, 3, 1, 3, 0, 6} คำตอบควรเป็น 1 & 3 ฉันตรวจสอบคำถามที่คล้ายกันที่นี่ แต่คำตอบใช้โครงสร้างข้อมูลบางอย่างเช่น HashSetฯลฯ อัลกอริทึมที่มีประสิทธิภาพเหมือนกันหรือไม่?
121 c++  c  algorithm 

23
มีอะไรอยู่ในเครื่องมือทางการศึกษาเพื่อแสดงให้เห็นถึงสมมติฐานที่ไม่มีเหตุผลที่ผู้คนตั้งไว้ใน C / C ++
ฉันต้องการเตรียมเครื่องมือทางการศึกษาเล็ก ๆ น้อย ๆ สำหรับ SO ซึ่งจะช่วยให้โปรแกรมเมอร์มือใหม่ (และระดับกลาง) รับรู้และท้าทายสมมติฐานที่ไม่ได้รับการรับรองใน C, C ++ และแพลตฟอร์มของพวกเขา ตัวอย่าง: "จำนวนเต็มพันรอบ" "ทุกคนมี ASCII" "ฉันสามารถจัดเก็บตัวชี้ฟังก์ชันในความว่างเปล่า *" ฉันคิดว่าโปรแกรมทดสอบขนาดเล็กสามารถทำงานบนแพลตฟอร์มต่างๆได้ซึ่งเรียกใช้สมมติฐานที่ "เป็นไปได้" ซึ่งจากประสบการณ์ของเราใน SO มักสร้างขึ้นโดยนักพัฒนากระแสหลักที่ไม่มีประสบการณ์ / กึ่งมีประสบการณ์จำนวนมากและบันทึกวิธีที่พวกเขาทำลายบนเครื่องต่างๆ เป้าหมายของสิ่งนี้ไม่ใช่เพื่อพิสูจน์ว่า "ปลอดภัย" ที่จะทำบางสิ่ง (ซึ่งคงเป็นไปไม่ได้ที่จะทำการทดสอบจะพิสูจน์อะไรก็ได้ถ้ามันแตก) แต่แทนที่จะแสดงให้เห็นว่าแม้แต่คนที่ไม่เข้าใจที่สุดว่าการแสดงออกที่ไม่เด่นชัดที่สุด หยุดทำงานบนเครื่องอื่นหากมีพฤติกรรมที่กำหนดไว้โดยไม่ได้กำหนดหรือการนำไปใช้งาน . เพื่อให้บรรลุสิ่งนี้ฉันอยากจะถามคุณ: ความคิดนี้จะปรับปรุงได้อย่างไร? แบบทดสอบใดที่จะดีและควรมีลักษณะอย่างไร? คุณจะทำการทดสอบบนแพลตฟอร์มที่คุณสามารถทำได้และโพสต์ผลลัพธ์เพื่อที่เราจะได้ฐานข้อมูลของแพลตฟอร์มแตกต่างกันอย่างไรและเหตุใดจึงอนุญาตให้ใช้ความแตกต่างนี้ได้ นี่คือเวอร์ชันปัจจุบันสำหรับของเล่นทดสอบ: #include <stdio.h> #include <limits.h> #include <stdlib.h> #include <stddef.h> int count=0; int total=0; …

2
เหตุใด #include <string> จึงป้องกันข้อผิดพลาดสแต็กล้นที่นี่
นี่คือรหัสตัวอย่างของฉัน: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class MyClass { string figName; public: MyClass(const string&amp; s) { figName = s; } const string&amp; getName() const { return figName; } }; ostream&amp; operator&lt;&lt;(ostream&amp; ausgabe, const MyClass&amp; f) { ausgabe &lt;&lt; f.getName(); return ausgabe; } int main() { MyClass f1("Hello"); cout …

11
เหตุใดรายการที่เชื่อมโยงจึงใช้พอยน์เตอร์แทนการจัดเก็บโหนดภายในโหนด
ฉันเคยทำงานกับรายการที่เชื่อมโยงมาก่อนใน Java แต่ฉันยังใหม่กับ C ++ มาก ฉันใช้คลาสโหนดนี้ที่มอบให้ฉันในโปรเจ็กต์ได้ดี class Node { public: Node(int data); int m_data; Node *m_next; }; แต่ฉันมีคำถามหนึ่งที่ตอบไม่ดีนัก ทำไมจึงต้องใช้ Node *m_next; เพื่อชี้ไปที่โหนดถัดไปในรายการแทนที่จะเป็น Node m_next; ฉันเข้าใจว่าควรใช้เวอร์ชันตัวชี้จะดีกว่า ฉันจะไม่เถียงข้อเท็จจริง แต่ไม่รู้ว่าทำไมมันดีกว่า ฉันได้รับคำตอบที่ไม่ชัดเจนนักว่าตัวชี้นั้นดีกว่าสำหรับการจัดสรรหน่วยความจำอย่างไรและฉันก็สงสัยว่าใครที่นี่จะช่วยให้ฉันเข้าใจสิ่งนั้นได้ดีขึ้น

18
วิธีคำนวณเวลาดำเนินการของข้อมูลโค้ดใน C ++
ฉันต้องคำนวณเวลาดำเนินการของข้อมูลโค้ด C ++ เป็นวินาที ต้องใช้งานได้ทั้งบนเครื่อง Windows หรือ Unix ฉันใช้รหัสรหัสต่อไปนี้เพื่อทำสิ่งนี้ (นำเข้าก่อน) clock_t startTime = clock(); // some code here // to compute its execution duration in runtime cout &lt;&lt; double( clock() - startTime ) / (double)CLOCKS_PER_SEC&lt;&lt; " seconds." &lt;&lt; endl; อย่างไรก็ตามสำหรับอินพุตขนาดเล็กหรือคำสั่งสั้น ๆ เช่น a = a + 1 ฉันจะได้ผลลัพธ์ "0 วินาที" …
121 c++  benchmarking 

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