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

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

9
คีย์เวิร์ด“ เสมือน” C ++ สำหรับฟังก์ชันในคลาสที่ได้รับ จำเป็นหรือไม่
ด้วยคำจำกัดความของโครงสร้างรับด้านล่าง ... struct A { virtual void hello() = 0; }; วิธีการ # 1: struct B : public A { virtual void hello() { ... } }; วิธีการ # 2: struct B : public A { void hello() { ... } }; มีความแตกต่างระหว่างสองวิธีในการแทนที่ฟังก์ชัน hello หรือไม่?

4
ตัวชี้สมาร์ท (เพิ่ม) อธิบาย
ความแตกต่างระหว่างพอยน์เตอร์ชุดต่อไปนี้คืออะไร? คุณใช้ตัวชี้แต่ละตัวในรหัสการผลิตเมื่อใด? ตัวอย่างจะได้รับการชื่นชม! scoped_ptr shared_ptr weak_ptr intrusive_ptr คุณใช้บูสต์ในรหัสการผลิตหรือไม่?

4
เหตุใดฟังก์ชันที่แทนที่ในคลาสที่ได้รับจะซ่อนโอเวอร์โหลดอื่น ๆ ของคลาสพื้นฐาน
พิจารณารหัส: #include <stdio.h> class Base { public: virtual void gogo(int a){ printf(" Base :: gogo (int) \n"); }; virtual void gogo(int* a){ printf(" Base :: gogo (int*) \n"); }; }; class Derived : public Base{ public: virtual void gogo(int* a){ printf(" Derived :: gogo (int*) \n"); }; }; int main(){ …

5
ฉันจะเพิ่มตัวเชื่อมโยงหรือการตั้งค่าสถานะการคอมไพล์ในไฟล์ CMake ได้อย่างไร
ฉันใช้arm-linux-androideabi-g++คอมไพเลอร์ เมื่อฉันพยายามรวบรวม "Hello, World!" โปรแกรมมันคอมไพล์ดี เมื่อฉันทดสอบโดยการเพิ่มการจัดการข้อยกเว้นแบบง่ายในโค้ดนั้นมันก็ทำงานได้เช่นกัน (หลังจากเพิ่ม-fexceptions.. ฉันคิดว่ามันถูกปิดใช้งานโดยค่าเริ่มต้น) นี้สำหรับอุปกรณ์ Android, และฉันเพียงต้องการที่จะใช้ CMake ndk-buildไม่ ตัวอย่างเช่น - first.cpp #include <iostream> using namespace std; int main() { try { } catch (...) { } return 0; } ./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions มันทำงานได้โดยไม่มีปัญหา ... ปัญหา ... ฉันพยายามรวบรวมไฟล์ด้วยไฟล์ CMake ฉันต้องการที่จะเพิ่ม-fexceptionsเป็นธง ฉันลองด้วย set (CMAKE_EXE_LINKER_FLAGS -fexceptions …
220 c++  cmake 

14
คำหลักอัตโนมัติ C ++ 11 มีมากเกินไป
ฉันใช้autoคำหลักใหม่ที่มีอยู่ในมาตรฐาน C ++ 11 สำหรับประเภท templated ที่ซับซ้อนซึ่งเป็นสิ่งที่ฉันเชื่อว่าได้รับการออกแบบมา แต่ฉันก็ใช้มันเพื่อสิ่งต่าง ๆ เช่น: auto foo = std::make_shared<Foo>(); และน่าสงสัยมากขึ้นสำหรับ: auto foo = bla(); // where bla() return a shared_ptr<Foo> ฉันไม่เห็นการสนทนาในหัวข้อนี้มากนัก ดูเหมือนว่าautoจะใช้มากเกินไปเนื่องจากประเภทหนึ่งมักเป็นรูปแบบของเอกสารและการตรวจสอบสติ คุณวาดเส้นในการใช้ที่ไหนautoและกรณีการใช้งานที่แนะนำสำหรับคุณลักษณะใหม่นี้คืออะไร เพื่อชี้แจง: ฉันไม่ได้ขอความคิดเห็นทางปรัชญา; ฉันขอใช้คำหลักนี้อย่างตั้งใจโดยคณะกรรมการมาตรฐานอาจมีความคิดเห็นเกี่ยวกับวิธีการใช้งานที่ตั้งใจนั้นได้รับรู้ในทางปฏิบัติ หมายเหตุด้านข้าง: คำถามนี้ถูกย้ายไปที่ SE.Programmers แล้วกลับไปที่ Stack Overflow การสนทนาเกี่ยวกับเรื่องนี้สามารถพบได้ในคำถามเมตานี้

14
วิธีใช้ enums ใน C ++
สมมติว่าเรามีenumสิ่งต่อไปนี้: enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday}; ฉันต้องการสร้างตัวอย่างของสิ่งนี้enumและเริ่มต้นด้วยค่าที่เหมาะสมดังนั้นฉันจะ: Days day = Days.Saturday; ตอนนี้ฉันต้องการตรวจสอบตัวแปรหรืออินสแตนซ์ของฉันด้วยenumค่าที่มีอยู่ดังนั้นฉัน: if (day == Days.Saturday) { std::cout << "Ok its Saturday"; } ซึ่งทำให้ฉันมีข้อผิดพลาดในการรวบรวม: ข้อผิดพลาด: นิพจน์หลักที่คาดไว้ก่อนหน้า '.' เหรียญ เพื่อให้ชัดเจนสิ่งที่แตกต่างระหว่างการพูดคือ: if (day == Days.Saturday) // Causes compilation error และ if (day == Saturday) ? สิ่งที่ทั้งสองอ้างถึงจริงๆแล้วในสิ่งนั้นตกลงและหนึ่งทำให้เกิดข้อผิดพลาดในการรวบรวม
218 c++  enums 

3
ทำไมการโอนเมทริกซ์ที่ 512x512 ช้ากว่าการแปลงเมทริกซ์ที่ 513x513 มาก?
หลังจากทำการทดลองบางอย่างเกี่ยวกับเมทริกซ์จตุรัสที่มีขนาดต่างกันรูปแบบจะปรากฏขึ้น คงเส้นคงวาtransposing เมทริกซ์ที่มีขนาด2^nช้ากว่า transposing 2^n+1หนึ่งขนาด สำหรับค่าเล็กน้อยของnความแตกต่างไม่สำคัญ ความแตกต่างใหญ่เกิดขึ้นอย่างไรก็ตามค่า 512 (อย่างน้อยสำหรับฉัน) คำเตือน: ฉันรู้ว่าฟังก์ชั่นไม่ได้เปลี่ยนเมทริกซ์จริง ๆ เพราะการแลกเปลี่ยนสองครั้งขององค์ประกอบ แต่มันก็ไม่ต่าง ตามรหัส: #define SAMPLES 1000 #define MATSIZE 512 #include <time.h> #include <iostream> int mat[MATSIZE][MATSIZE]; void transpose() { for ( int i = 0 ; i < MATSIZE ; i++ ) for ( int j = 0 ; …

2
ทำไมฉันไม่สามารถผลักดัน unique_ptr ไปยังเวกเตอร์ได้
เกิดอะไรขึ้นกับโปรแกรมนี้ #include <memory> #include <vector> int main() { std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } ข้อผิดพลาด: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr<int>, _Tp* …


4
ทำไมคำสั่ง if-if ที่รวมการมอบหมายและการตรวจสอบความเท่าเทียมกลับมาจริงหรือไม่
ฉันได้รับความคิดของความผิดพลาดเริ่มต้นบางอย่างและฉันจบลงด้วยหนึ่งในifคำสั่ง ฉันขยายโค้ดเล็กน้อยถึงสิ่งนี้: int i = 0; if (i = 1 && i == 0) { std::cout << i; } ฉันได้เห็นว่าifผลตอบแทนที่คำสั่งจริงและมันcoutก็เป็นi 1หากiได้รับมอบหมาย1ในงบถ้าทำไมไม่i == 0กลับมาtrue?
216 c++  if-statement 

3
เหตุใดคำจำกัดความของฟังก์ชันพอยน์เตอร์จึงทำงานกับเครื่องหมาย '&' หรือเครื่องหมายดอกจัน '*' จำนวนเท่าใดก็ได้
ทำไมงานต่อไปนี้ void foo() { cout << "Foo to you too!\n"; }; int main() { void (*p1_foo)() = foo; void (*p2_foo)() = *foo; void (*p3_foo)() = &foo; void (*p4_foo)() = *&foo; void (*p5_foo)() = &*foo; void (*p6_foo)() = **foo; void (*p7_foo)() = **********************foo; (*p1_foo)(); (*p2_foo)(); (*p3_foo)(); (*p4_foo)(); (*p5_foo)(); (*p6_foo)(); (*p7_foo)(); }
216 c++  c  function-pointers 

15
การเรียงลำดับ C ++ และการติดตามดัชนี
ใช้ C ++ และหวังว่าไลบรารี่มาตรฐานฉันต้องการเรียงลำดับของตัวอย่างตามลำดับจากน้อยไปหามาก แต่ฉันยังต้องการจดจำดัชนีดั้งเดิมของตัวอย่างใหม่ A : [5, 2, 1, 4, 3]ตัวอย่างเช่นผมมีชุดหรือเวกเตอร์หรือเมทริกซ์ของกลุ่มตัวอย่าง ฉันต้องการเรียงลำดับสิ่งเหล่านี้ B : [1,2,3,4,5]แต่ฉันต้องการจดจำดัชนีดั้งเดิมของค่าเพื่อให้ฉันสามารถรับชุดอื่นซึ่งจะเป็น: C : [2, 1, 4, 3, 0 ]- ซึ่งสอดคล้องกับดัชนีของแต่ละองค์ประกอบใน 'B' ในต้นฉบับ ' A' ตัวอย่างเช่นใน Matlab คุณสามารถทำได้: [a,b]=sort([5, 8, 7]) a = 5 7 8 b = 1 3 2 ทุกคนสามารถเห็นวิธีที่ดีในการทำเช่นนี้?
216 c++  sorting  stl  indexing 

6
make_unique และการส่งต่อที่สมบูรณ์แบบ
เหตุใดจึงไม่มีstd::make_uniqueเทมเพลตฟังก์ชันในไลบรารี C ++ 11 มาตรฐาน ฉันหา std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); verbose เล็กน้อย ต่อไปนี้จะดีกว่านี้ไหม auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); สิ่งนี้ซ่อนสิ่งที่newดีและกล่าวถึงเพียงครั้งเดียวเท่านั้น อย่างไรก็ตามนี่คือความพยายามของฉันในการดำเนินการmake_unique: template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); } ฉันใช้เวลาพอสมควรในการstd::forwardรวบรวมสิ่งต่าง ๆ แต่ฉันไม่แน่ใจว่ามันถูกต้องหรือไม่ ใช่ไหม? std::forward<Args>(args)...หมายความว่าอะไรกันแน่? คอมไพเลอร์ทำอะไรได้บ้าง

4
C ++ วนผ่านแผนที่
ฉันต้องการวนซ้ำในแต่ละองค์ประกอบmap<string, int>โดยไม่ทราบว่าเป็นค่าหรือคีย์สตริง สิ่งที่ฉันมี: void output(map<string, int> table) { map<string, int>::iterator it; for (it = table.begin(); it != table.end(); it++) { //How do I access each element? } }
216 c++  dictionary 

8
การประกาศล่วงหน้าใน C ++ คืออะไร
ที่: http://www.learncpp.com/cpp-tutorial/19-header-files/ ต่อไปนี้จะกล่าวถึง: add.cpp: int add(int x, int y) { return x + y; } main.cpp: #include <iostream> int add(int x, int y); // forward declaration using function prototype int main() { using namespace std; cout << "The sum of 3 and 4 is " << add(3, 4) << endl; …

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