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

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

4
ฉันจะใช้ CMake ได้อย่างไร?
ฉันพยายามใช้ CMake เพื่อรวบรวม opencv ฉันกำลังอ่านบทช่วยสอนแต่ไม่เข้าใจว่าไฟล์ CMakeLists คืออะไรและเชื่อมต่อกับ gui ของ CMake ได้อย่างไร ยังไม่เข้าใจว่า makefiles คืออะไร CMakeLists เหมือนกันหรือไม่ แล้วไฟล์ไหนที่ฉันเปิดท้ายด้วย visual-studio?
102 c++  visual-studio  cmake 

4
เรียกใช้แอปพลิเคชันใน GDB จนกว่าจะมีข้อยกเว้นเกิดขึ้น
ฉันกำลังทำงานกับแอพพลิเคชั่นมัลติเธรดและต้องการดีบักโดยใช้ GDB ปัญหาคือหนึ่งในเธรดของฉันยังคงตายด้วยข้อความ: pure virtual method called terminate called without an active exception Abort ฉันรู้สาเหตุของข้อความนั้น แต่ฉันไม่รู้ว่ามันเกิดขึ้นที่ไหนในชุดข้อความ backtrace จะเป็นประโยชน์จริงๆ เมื่อฉันเรียกใช้แอปใน GDB แอปจะหยุดชั่วคราวทุกครั้งที่เธรดถูกระงับหรือกลับมาทำงานต่อ ฉันต้องการให้แอปของฉันทำงานต่อไปตามปกติจนกว่าเธรดใดเธรดหนึ่งจะตายโดยมีข้อยกเว้นนั้นเมื่อถึงจุดนั้นทุกอย่างควรหยุดเพื่อที่ฉันจะได้รับการย้อนกลับ

2
การสร้างตัวเลขสุ่มใน C ++ 11: การสร้างมันทำงานอย่างไร [ปิด]
มันยากที่จะบอกว่ากำลังถามอะไรที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือมีวาทศิลป์และไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน9 ปีที่ผ่านมา ฉันเพิ่งค้นพบวิธีใหม่ในการสร้างตัวเลขสุ่มใน C ++ 11 แต่ไม่สามารถย่อยเอกสารที่ฉันอ่านเกี่ยวกับเรื่องนี้ได้ ( เครื่องมือนั้นคืออะไรคำศัพท์ทางคณิตศาสตร์เช่นการแจกแจง "โดยที่จำนวนเต็มทั้งหมดที่ได้มีโอกาสเท่ากัน ") ใครก็ได้โปรดอธิบาย พวกเขาคืออะไร? หมายความว่าอย่างไร วิธีสร้าง? พวกเขาทำงานอย่างไร? ฯลฯ คุณสามารถเรียกทั้งหมดนี้ได้ในคำถามที่พบบ่อยเกี่ยวกับการสร้างตัวเลขแบบสุ่ม
102 c++  c++11  random 

8
เนมสเปซสำหรับประเภท enum - แนวทางปฏิบัติที่ดีที่สุด
บ่อยครั้งหนึ่งต้องมีการแจกแจงหลายประเภทด้วยกัน บางครั้งคนหนึ่งมีชื่อปะทะกัน วิธีแก้ปัญหาสองวิธีสำหรับสิ่งนี้: ใช้เนมสเปซหรือใช้ชื่อองค์ประกอบ enum ที่ 'ใหญ่กว่า' อย่างไรก็ตามโซลูชันเนมสเปซยังมีการใช้งานที่เป็นไปได้สองแบบ: คลาสดัมมี่ที่มี enum ซ้อนกันหรือเนมสเปซแบบเต็ม ฉันกำลังมองหาข้อดีข้อเสียของทั้งสามวิธี ตัวอย่าง: // oft seen hand-crafted name clash solution enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd }; enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd }; void setPenColor( const eColors c ) { switch (c) { default: assert(false); break; …
102 c++  enums  scope  nested 

20
C / C ++ ตรวจสอบว่ามีการตั้งค่าหนึ่งบิตหรือไม่เช่นตัวแปร int
int temp = 0x5E; // in binary 0b1011110. มีวิธีตรวจสอบว่าบิต 3 ใน temp เป็น 1 หรือ 0 โดยไม่ต้องขยับและกำบังเล็กน้อยหรือไม่ แค่อยากรู้ว่ามีฟังก์ชันในตัวสำหรับสิ่งนี้หรือฉันถูกบังคับให้เขียนด้วยตัวเอง
102 c++  c  bit-manipulation 

16
C ++ ได้รับเวลามิลลิวินาทีบน Linux - clock () ดูเหมือนจะทำงานไม่ถูกต้อง
ใน Windows ให้clock()ส่งคืนเวลาเป็นมิลลิวินาที แต่ในกล่อง Linux นี้ที่ฉันกำลังทำงานอยู่มันจะปัดเศษเป็น 1000 ที่ใกล้ที่สุดดังนั้นความแม่นยำจึงอยู่ที่ระดับ "วินาที" เท่านั้นและไม่ถึงระดับมิลลิวินาที ฉันพบวิธีแก้ปัญหาด้วย Qt โดยใช้QTimeคลาสสร้างอินสแตนซ์อ็อบเจ็กต์และเรียกstart()ใช้จากนั้นโทรelapsed()เพื่อรับจำนวนมิลลิวินาทีที่ผ่านไป ฉันโชคดีมากเพราะฉันทำงานกับ Qt เพื่อเริ่มต้น แต่ฉันต้องการโซลูชันที่ไม่ต้องพึ่งพาไลบรารีของบุคคลที่สาม ไม่มีวิธีมาตรฐานในการทำเช่นนี้หรือไม่? อัปเดต กรุณาอย่าแนะนำ Boost .. ถ้า Boost และ Qt ทำได้แน่นอนว่ามันไม่ใช่เวทย์มนตร์ต้องมีมาตรฐานที่พวกเขาใช้อยู่!
102 c++  timer  clock 

2
&& หมายถึงอะไรในโมฆะ * p = && abc;
void *p = &&abc;ฉันมาข้ามชิ้นส่วนของรหัส ความสำคัญของ&&ที่นี่คืออะไร? ฉันรู้เกี่ยวกับการอ้างอิง rvalue แต่ฉันคิดว่า&&ใช้ในบริบทนี้แตกต่างกัน อะไร&&บ่งชี้ในvoid *p = &&abc;?
102 c++  c  gcc  operators 

9
ทำไม string :: Compare ส่งคืน int?
ทำไมstring::compareกลับintแทนที่จะเป็นชนิดที่มีขนาดเล็กเหมือนshortหรือchar? ความเข้าใจของฉันคือวิธีนี้ส่งกลับค่า -1, 0 หรือ 1 เท่านั้น ส่วนที่สองถ้าฉันจะออกแบบวิธีการเปรียบเทียบที่เปรียบเทียบวัตถุสองประเภทFooและฉันต้องการส่งคืนค่า -1, 0 หรือ 1 เท่านั้นจะใช้shortหรือcharโดยทั่วไปเป็นความคิดที่ดีหรือไม่? แก้ไข: ฉันได้รับการแก้ไขstring::compareไม่คืนค่า -1, 0 หรือ 1 ในความเป็นจริงมันส่งคืนค่า> 0, <0 หรือ 0 ขอบคุณที่ให้ฉันอยู่ในไลน์ ดูเหมือนว่าคำตอบจะคร่าวๆไม่มีเหตุผลที่จะส่งคืนประเภทที่เล็กกว่าintเนื่องจากค่าที่ส่งคืนเป็น "rvalues" และ "rvalues" เหล่านั้นไม่ได้รับประโยชน์จากการน้อยกว่าประเภท int (4 ไบต์) นอกจากนี้หลายคนยังชี้ให้เห็นว่าการลงทะเบียนของระบบส่วนใหญ่อาจจะมีขนาดintอยู่แล้วเนื่องจากการลงทะเบียนเหล่านี้จะถูกเติมเต็มไม่ว่าคุณจะให้ค่า 1, 2 หรือ 4 ไบต์ก็ตามไม่มีข้อได้เปรียบที่แท้จริงในการคืนค่า มูลค่าน้อยกว่า แก้ไข 2: ในความเป็นจริงดูเหมือนว่าอาจมีค่าใช้จ่ายในการประมวลผลเพิ่มเติมเมื่อใช้ประเภทข้อมูลที่เล็กกว่าเช่นการจัดตำแหน่งการมาสก์ ฯลฯ ฉันทามติทั่วไปคือประเภทข้อมูลที่เล็กลงมีอยู่เพื่อประหยัดในหน่วยความจำเมื่อทำงานกับข้อมูลจำนวนมากเช่นเดียวกับใน กรณีของอาร์เรย์ วันนี้ได้เรียนรู้อะไรบ้างขอบคุณอีกครั้ง!
102 c++ 

7
รีเซ็ต C int array เป็นศูนย์: วิธีที่เร็วที่สุด?
สมมติว่าเรามีT myarray[100]T = int, int ที่ไม่ได้ลงนาม, int ยาวหรือ int ยาวที่ไม่ได้ลงนามวิธีใดคือวิธีที่เร็วที่สุดในการรีเซ็ตเนื้อหาทั้งหมดเป็นศูนย์ (ไม่เพียง แต่สำหรับการเริ่มต้น แต่เพื่อรีเซ็ตเนื้อหาหลาย ๆ ครั้งในโปรแกรมของฉัน) เหรอ? อาจจะมี memset? คำถามเดียวกันสำหรับอาร์เรย์แบบไดนามิกเช่นT *myarray = new T[100].
102 c++  c  arrays  memset 

7
เขตข้อมูลคงที่สืบทอดมาหรือไม่
เมื่อสมาชิกแบบคงที่ได้รับการสืบทอดพวกมันคงที่สำหรับลำดับชั้นทั้งหมดหรือเพียงแค่คลาสนั้นเช่น: class SomeClass { public: SomeClass(){total++;} static int total; }; class SomeDerivedClass: public SomeClass { public: SomeDerivedClass(){total++;} }; int main() { SomeClass A; SomeClass B; SomeDerivedClass C; return 0; } ผลรวมจะเป็น 3 ในทั้งสามอินสแตนซ์หรือจะเป็น 2 สำหรับSomeClassและ 1 สำหรับSomeDerivedClass?
102 c++  inheritance  static 

5
การลบองค์ประกอบจากเวกเตอร์
ฉันต้องการล้างองค์ประกอบจากเวกเตอร์โดยใช้วิธีการลบ แต่ปัญหาที่นี่คือไม่รับประกันว่าองค์ประกอบจะเกิดขึ้นเพียงครั้งเดียวในเวกเตอร์ อาจมีอยู่หลายครั้งและฉันจำเป็นต้องล้างทั้งหมด รหัสของฉันเป็นดังนี้: void erase(std::vector<int>& myNumbers_in, int number_in) { std::vector<int>::iterator iter = myNumbers_in.begin(); std::vector<int>::iterator endIter = myNumbers_in.end(); for(; iter != endIter; ++iter) { if(*iter == number_in) { myNumbers_in.erase(iter); } } } int main(int argc, char* argv[]) { std::vector<int> myNmbers; for(int i = 0; i < 2; ++i) { myNmbers.push_back(i); …
102 c++  vector  stl  erase 

4
การเข้าถึงองค์ประกอบแผนที่ C ++ const
ฉันพยายามใช้ตัวดำเนินการ [] เข้าถึงองค์ประกอบในแมป const C ++ แต่วิธีนี้ล้มเหลว ฉันยังพยายามใช้ "at ()" เพื่อทำสิ่งเดียวกัน มันได้ผลในครั้งนี้ อย่างไรก็ตามฉันไม่พบข้อมูลอ้างอิงใด ๆ เกี่ยวกับการใช้ "at ()" เพื่อเข้าถึงองค์ประกอบในแผนที่ const C ++ "at ()" เป็นฟังก์ชันที่เพิ่มใหม่ในแผนที่ C ++ หรือไม่ ฉันจะหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่ไหน ขอบคุณมาก! ตัวอย่างอาจเป็นดังต่อไปนี้: #include <iostream> #include <map> using namespace std; int main() { map<int, char> A; A[1] = 'b'; A[3] = 'c'; const …
102 c++  stl  map  const 


4
จะทราบได้อย่างไรว่าไฟล์ส่วนหัวมาจากไหน?
ฉันจะทราบได้อย่างไรว่า g ++ สามารถค้นหาไฟล์รวมได้อย่างไร โดยทั่วไปถ้าฉัน #include <foo.h> g ++ จะสแกนเส้นทางการค้นหาโดยใช้ตัวเลือกรวมใด ๆ เพื่อเพิ่มหรือแก้ไขเส้นทาง แต่ในตอนท้ายของวันมีวิธีใดบ้างที่ฉันสามารถบอกเส้นทางสัมบูรณ์ของ foo.h ที่ g ++ เลือกรวบรวมได้? เกี่ยวข้องโดยเฉพาะอย่างยิ่งหากมี foo.h มากกว่าหนึ่งรายการในเส้นทางการค้นหามากมาย สั้น ๆ วิธีที่จะทำให้สำเร็จ ... มีวิธีรับ g ++ เพื่อบอกฉันว่าเส้นทางการค้นหาสุดท้ายคืออะไรหลังจากรวมค่าเริ่มต้นและตัวเลือกทั้งหมดรวมถึง?
102 c++  c  gcc  include  g++ 

6
ส่งผ่านอาร์เรย์ std :: ที่ไม่ทราบขนาดไปยังฟังก์ชัน
ใน C ++ 11 ฉันจะเขียนฟังก์ชัน (หรือวิธีการ) ที่ใช้ std :: array ของชนิดที่รู้จัก แต่ไม่ทราบขนาดได้อย่างไร // made up example void mulArray(std::array<int, ?>& arr, const int multiplier) { for(auto& e : arr) { e *= multiplier; } } // lets imagine these being full of numbers std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> …
102 c++  c++11  stdarray 

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