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

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

5
เหตุใดฉันจึงไม่สามารถประกาศคลาสในเนมสเปซโดยใช้ double colons ได้
class Namespace::Class; ทำไมฉันต้องทำสิ่งนี้: namespace Namespace { class Class; } การใช้ VC ++ 8.0 ปัญหาเกี่ยวกับคอมไพเลอร์: ข้อผิดพลาด C2653: 'Namespace': ไม่ใช่ชื่อคลาสหรือเนมสเปซ ฉันคิดว่าปัญหาที่นี่คือคอมไพเลอร์ไม่สามารถบอกได้ว่าNamespaceเป็นคลาสหรือ namespace หรือไม่? แต่ทำไมเรื่องนี้ถึงเกิดขึ้นเพราะมันเป็นเพียงการประกาศล่วงหน้า มีวิธีการส่งต่อประกาศคลาสที่กำหนดไว้ในบาง namespace หรือไม่ ไวยากรณ์ข้างต้นรู้สึกเหมือนฉัน "เปิดใหม่" namespace และขยายคำจำกัดความ เกิดอะไรขึ้นถ้าClassไม่ได้นิยามไว้จริง ๆNamespace? บางครั้งจะส่งผลให้เกิดข้อผิดพลาดหรือไม่?
164 c++  namespaces 

10
วิธีแก้ไขไฟล์. pch ที่หายไปในบิลด์?
เมื่อฉันสร้างโซลูชัน c ++ ใน Visual Studio จะบ่นว่าไฟล์ xxxxx.pch หายไป มีการตั้งค่าที่ฉันขาดหายไปเพื่อให้ส่วนหัวที่คอมไพล์แล้วกลับมาไหม? นี่คือข้อผิดพลาดที่แน่นอนเพื่อความสมบูรณ์: Error 1 fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory

6
ฟังก์ชั่นเสมือนจริงสามารถมีพารามิเตอร์เริ่มต้นได้หรือไม่?
ถ้าฉันประกาศคลาสฐาน (หรือคลาสอินเตอร์เฟส) และระบุค่าเริ่มต้นสำหรับพารามิเตอร์อย่างน้อยหนึ่งคลาสคลาสที่ได้รับจะต้องระบุค่าเริ่มต้นเดียวกันและถ้าไม่ค่าเริ่มต้นใดจะปรากฏในคลาสที่ได้รับ? ภาคผนวก: ฉันยังสนใจที่จะจัดการสิ่งนี้ในคอมไพเลอร์ที่แตกต่างกันและการใส่ข้อมูลใด ๆ เกี่ยวกับการปฏิบัติ "แนะนำ" ในสถานการณ์นี้
164 c++  c++11  c++03 

3
ในตัวอย่างของ Stroustrup เครื่องหมายโคลอนหมายถึงอะไรใน“ return 1: 2”?
ฉันไม่เข้าใจการใช้โคลอนหนึ่งครั้ง ฉันพบมันในหนังสือภาษา C ++ Programming Languageโดย Bjarne Stroustrup, 4th edition, ส่วน 11.4.4 "การโทรและส่งคืน", หน้า 297: void g(double y) { [&]{ f(y); } // return type is void auto z1 = [=](int x){ return x+y; } // return type is double auto z2 = [=,y]{ if (y) return 1; else return …
163 c++  syntax 

13
D เป็นทางเลือกที่น่าเชื่อถือสำหรับ Java และ C ++ หรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา เป็นภาษา Dเป็นทางเลือกที่น่าเชื่อถือ Java และ C ++? อะไรจะเป็นทางเลือกที่น่าเชื่อถือ ฉันควรจะรบกวนการเรียนรู้หรือไม่? สมควรได้รับการประกาศข่าวประเสริฐหรือไม่ เหตุผลหลักที่ฉันถามคือด้วยมาตรฐาน C ++ ใหม่ (c ++ 0x) เกือบที่นี่มันชัดเจนสำหรับฉันว่าภาษาได้ผ่านจุดที่ไม่กลับมาด้วยความเคารพกับทุกคนที่เคยเข้าใจมัน ฉันรู้ว่า C / C ++ จะไม่มีวันตาย แต่ในบางจุดเราจำเป็นต้องดำเนินการต่อไป แม้กระทั่ง COBOL ก็มีวันและ Java มีหลายประการเลิก C ++ แล้วจะมีอะไรต่อไป D เติมใบเรียกเก็บเงินหรือไม่?
163 java  c++  c  d 

7
ข้อดีของการใช้ nullptr คืออะไร
ชิ้นส่วนของรหัสนี้แนวคิดจะเป็นสิ่งเดียวกันสำหรับสามตัวชี้ (เริ่มต้นชี้ปลอดภัย): int* p1 = nullptr; int* p2 = NULL; int* p3 = 0; ดังนั้นสิ่งที่เป็นข้อดีของการกำหนดตัวชี้nullptrมากกว่ากำหนดให้ค่าNULLหรือ0?
163 c++  c++11  null  c++-faq  nullptr 


8
ความแตกต่างระหว่าง istringstream, ostringstream และ stringstream คืออะไร / ทำไมไม่ใช้ stringstream ในทุกกรณี?
เมื่อผมจะใช้std::istringstream, std::ostringstreamและstd::stringstreamและทำไมฉันจึงไม่ควรใช้std::stringstreamในทุกสถานการณ์ (จะมีผู้ใดปัญหาประสิทธิภาพการทำงานรันไทม์?) สุดท้ายมีอะไรที่ไม่ดีเกี่ยวกับเรื่องนี้ (แทนที่จะใช้สตรีมเลย): std::string stHehe("Hello "); stHehe += "stackoverflow.com"; stHehe += "!";

4
เพิ่มไฟล์ทั้งหมดในโฟลเดอร์ไปยังเป้าหมายโดยอัตโนมัติโดยใช้ CMake หรือไม่
ฉันกำลังพิจารณาเปลี่ยนโครงการข้ามแพลตฟอร์มจากระบบการจัดการการสร้างที่แยกต่างหากใน Visual C ++, XCode และ makefiles เป็น CMake คุณสมบัติที่สำคัญอย่างหนึ่งที่ฉันต้องการคือการเพิ่มไฟล์ทั้งหมดในไดเรกทอรีไปยังเป้าหมายโดยอัตโนมัติ แม้ว่าสิ่งนี้จะง่ายต่อการทำ แต่ก็ไม่สามารถทำได้ด้วย Visual C ++ และ XCode (แก้ไขฉันถ้าฉันผิด) เป็นไปได้ไหมที่จะทำใน CMake โดยตรง อย่างไร?

8
จะดีกว่าถ้าใช้ std :: memcpy () หรือ std :: copy () ในแง่ของประสิทธิภาพ?
จะดีกว่าที่จะใช้memcpyตามที่แสดงด้านล่างหรือดีกว่าที่จะใช้std::copy()ในแง่ของประสิทธิภาพ? ทำไม? char *bits = NULL; ... bits = new (std::nothrow) char[((int *) copyMe->bits)[0]]; if (bits == NULL) { cout << "ERROR Not enough memory.\n"; exit(1); } memcpy (bits, copyMe->bits, ((int *) copyMe->bits)[0]);

3
เหตุใดการแปลงจากค่าคงที่สตริงถึง 'char *' ใช้ได้ใน C แต่ไม่ถูกต้องใน C ++
มาตรฐาน C ++ 11 (ISO / IEC 14882: 2011) กล่าวใน§ C.1.1: char* p = "abc"; // valid in C, invalid in C++ สำหรับ C ++ มันก็โอเคในฐานะที่เป็นตัวชี้ไปที่ตัวอักษรของสตริงที่เป็นอันตรายเนื่องจากความพยายามใด ๆ ในการแก้ไขมันจะนำไปสู่ความผิดพลาด แต่ทำไมมันถึงใช้ได้ใน C? C ++ 11 ยังบอกด้วย: char* p = (char*)"abc"; // OK: cast added ซึ่งหมายความว่าหากมีการเพิ่มการร่ายลงในคำสั่งแรกมันจะใช้ได้ ทำไมการคัดเลือกนักแสดงทำให้คำสั่งที่สองใช้ได้ใน C ++ และมันแตกต่างจากคำสั่งแรกได้อย่างไร? มันยังคงเป็นอันตรายหรือไม่? ถ้าเป็นเช่นนั้นทำไมมาตรฐานถึงบอกว่าตกลง
163 c++  c  string  c++11  char 

10
ฉันควรเก็บวัตถุทั้งหมดหรือตัวชี้ไปยังวัตถุในภาชนะบรรจุหรือไม่
การออกแบบระบบใหม่ตั้งแต่เริ่มต้น ฉันจะใช้ STL เพื่อจัดเก็บรายการและแผนที่ของวัตถุระยะยาว คำถาม: ฉันควรให้แน่ใจว่าวัตถุของฉันมีตัวสร้างสำเนาและจัดเก็บสำเนาของวัตถุภายในคอนเทนเนอร์ STL ของฉันหรือโดยทั่วไปจะดีกว่าที่จะจัดการชีวิต & ขอบเขตตัวเองและเพียงแค่เก็บพอยน์เตอร์ไปยังวัตถุเหล่านั้นในคอนเทนเนอร์ STL ของฉัน ฉันรู้ว่านี่เป็นรายละเอียดที่ค่อนข้างสั้น แต่ฉันกำลังมองหาคำตอบที่ดีกว่า "เชิงทฤษฎี" ถ้ามีอยู่เนื่องจากฉันรู้ว่าทั้งสองวิธีนี้เป็นไปได้ ข้อเสียที่ชัดเจนมากสองอย่างในการเล่นกับพอยน์เตอร์: 1) ฉันต้องจัดการการจัดสรร / การจัดสรรคืนของวัตถุเหล่านี้ด้วยตัวเองในขอบเขตที่นอกเหนือจาก STL 2) ฉันไม่สามารถสร้างวัตถุชั่วคราวในสแต็กและเพิ่มลงในคอนเทนเนอร์ของฉัน มีอะไรอีกบ้างที่ฉันขาดไป?
162 c++  stl  pointers 

5
ทำไมลูปนี้สร้าง“ คำเตือน: การวนซ้ำ 3u เรียกใช้พฤติกรรมที่ไม่ได้กำหนด” และส่งออกมากกว่า 4 บรรทัด
รวบรวมสิ่งนี้: #include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i*1000000000 << std::endl; } และgccสร้างคำเตือนต่อไปนี้: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i*1000000000 << std::endl; ^ ฉันเข้าใจว่ามีจำนวนเต็มล้นที่ลงนามแล้ว สิ่งที่ฉันไม่สามารถทำได้คือทำไม iค่าจึงแตกโดยการดำเนินการมากเกินไป ฉันได้อ่านคำตอบว่าทำไมจำนวนเต็มล้นใน x86 กับ GCC ทำให้เกิดการวนซ้ำไม่สิ้นสุด? แต่ฉันยังไม่ชัดเจนว่าทำไมสิ่งนี้เกิดขึ้น - ฉันได้รับ "undefined" หมายถึง "อะไรก็ได้ที่เกิดขึ้น" แต่สาเหตุพื้นฐานของพฤติกรรมที่เฉพาะเจาะจงนี้คืออะไร …

1
string_view คืออะไร
string_viewเป็นคุณลักษณะที่เสนอภายใน C ++ Library Fundamentals TS ( N3921 ) เพิ่มใน C ++ 17 เท่าที่ฉันเข้าใจมันเป็นประเภทที่เป็นตัวแทนของสตริง "แนวคิด" บางอย่างที่เป็นมุมมองของภาชนะประเภทใด ๆ ที่สามารถเก็บสิ่งที่ดูได้เป็นสตริง ถูกต้องหรือไม่ ควรเป็นconst std::string&พารามิเตอร์แบบบัญญัติ string_viewหรือไม่ มีประเด็นสำคัญอีกข้อหนึ่งที่string_viewต้องพิจารณาหรือไม่?

15
วิธีการหลีกเลี่ยงการล้นใน expr เอบีซีดี
ฉันต้องคำนวณนิพจน์ที่มีลักษณะดังนี้: A*B - C*D, ชนิดของพวกเขาคือ: signed long long int A, B, C, D; แต่ละหมายเลขสามารถมีขนาดใหญ่มาก (ไม่ล้นประเภท) ในขณะที่A*Bอาจทำให้เกิดการล้นในเวลาเดียวกันการแสดงออกA*B - C*Dอาจมีขนาดเล็กมาก ฉันจะคำนวณอย่างถูกต้องได้อย่างไร ตัวอย่างเช่น: MAX * MAX - (MAX - 1) * (MAX + 1) == 1, ที่ไหนMAX = LLONG_MAX - nและ n - จำนวนธรรมชาติบางอย่าง
161 c++  c  integer-overflow 

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