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

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

6
ฉันจะพิมพ์ค่าทั้งหมดของสตริงแบบยาวใน gdb ได้อย่างไร?
ฉันต้องการพิมพ์ความยาวเต็มของ C-string ใน GDB โดยค่าเริ่มต้นมันเป็นตัวย่อฉันจะบังคับให้ GDB พิมพ์สตริงทั้งหมดได้อย่างไร
376 c++  c  string  debugging  gdb 

5
อายุการใช้งานของตัวแปรแบบคงที่ในฟังก์ชัน C ++ คืออะไร
หากตัวแปรถูกประกาศstaticในขอบเขตของฟังก์ชั่นมันจะเริ่มต้นได้เพียงครั้งเดียวและเก็บค่าไว้ระหว่างการเรียกใช้ฟังก์ชัน อายุการใช้งานของมันคืออะไร? ตัวสร้างและ destructor ของมันถูกเรียกเมื่อใด void foo() { static string plonk = "When will I die?"; }
373 c++  static  lifetime 

30
การเปรียบเทียบสตริงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน C ++ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน2 ปีที่ผ่านมา คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ วิธีที่ดีที่สุดในการทำการเปรียบเทียบสตริงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน C ++ โดยไม่ต้องแปลงสตริงเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กทั้งหมดคืออะไร โปรดระบุว่าวิธีนี้เป็นมิตรกับ Unicode หรือไม่และสามารถพกพาได้อย่างไร
373 c++  string 

14
เหตุใด C ++ STL จึงไม่ให้บริการคอนเทนเนอร์ "ต้นไม้"
เหตุใด C ++ STL จึงไม่ให้บริการคอนเทนเนอร์ "ต้นไม้" และสิ่งที่ดีที่สุดที่จะใช้แทนคืออะไร ฉันต้องการจัดเก็บลำดับชั้นของวัตถุเป็นต้นไม้แทนที่จะใช้ต้นไม้เป็นการปรับปรุงประสิทธิภาพ ...
373 c++  stl  tree 

12
มีข้อดีของการใช้แผนที่บน unordered_map ในกรณีที่เป็นกุญแจสำคัญหรือไม่?
การพูดคุยเมื่อไม่นานมานี้unordered_mapใน C ++ ทำให้ฉันรู้ว่าฉันควรใช้unordered_mapกับกรณีส่วนใหญ่ที่ฉันเคยใช้มาmapก่อนเนื่องจากประสิทธิภาพของการค้นหา ( ตัดจำหน่าย O (1)เทียบกับO (log n ) เวลาส่วนใหญ่ที่ฉันใช้แผนที่ฉันใช้อย่างใดอย่างหนึ่งintหรือstd::stringเป็นชนิดคีย์ ดังนั้นฉันไม่มีปัญหากับนิยามของฟังก์ชันแฮช ยิ่งฉันคิดถึงมันมากเท่าไรฉันก็ยิ่งรู้ว่าฉันไม่สามารถหาเหตุผลในการใช้ปุ่มstd::mapa std::unordered_mapในกรณีของปุ่มที่มีประเภทง่าย ๆ ได้ - ฉันดูที่อินเตอร์เฟสและไม่พบสิ่งใดเลย ความแตกต่างที่สำคัญที่จะส่งผลกระทบต่อรหัสของฉัน ดังนั้นคำถาม: มีเหตุผลที่แท้จริงที่จะใช้std::mapมากกว่าstd::unordered_mapในกรณีของประเภทง่ายเช่นintและstd::string? ฉันขอจากมุมมองการเขียนโปรแกรมอย่างเคร่งครัด - ฉันรู้ว่ามันไม่ได้พิจารณาอย่างเต็มที่มาตรฐานและอาจก่อให้เกิดปัญหากับการย้าย นอกจากนี้ฉันคาดหวังว่าหนึ่งในคำตอบที่ถูกต้องอาจเป็น"มันมีประสิทธิภาพมากกว่าสำหรับชุดข้อมูลขนาดเล็ก"เนื่องจากมีค่าใช้จ่ายน้อย (นั่นเป็นเรื่องจริงหรือ?) - ดังนั้นฉันจึงต้องการ จำกัด คำถามให้กับกรณีที่จำนวน คีย์นั้นไม่สำคัญ (> 1 024) แก้ไข: duh ฉันลืมชัดเจน (ขอบคุณ GMan!) - ใช่แผนที่ได้รับคำสั่งแน่นอน - ฉันรู้แล้วและกำลังมองหาเหตุผลอื่น


1
เทมเพลต C ++ เทมเพลต
ฉันมีเรียน template<size_t N, size_t M> class Matrix { // .... }; ฉันต้องการสร้าง a typedefซึ่งสร้างVector(เวกเตอร์คอลัมน์) ซึ่งเทียบเท่ากับ a Matrixขนาด N และ 1 สิ่งที่ต้องการ: typedef Matrix<N,1> Vector<N>; ซึ่งก่อให้เกิดข้อผิดพลาดในการรวบรวม ต่อไปนี้สร้างสิ่งที่คล้ายกัน แต่ไม่ใช่สิ่งที่ฉันต้องการ: template <size_t N> class Vector: public Matrix<N,1> { }; มีวิธีแก้ปัญหาหรือวิธีแก้ปัญหา / แนวทางปฏิบัติที่ไม่แพงเกินไปหรือไม่?
368 c++  templates  c++11  typedef 


21
ตรวจสอบว่า double (หรือ float) เป็น NaN ใน C ++
มีฟังก์ชั่น isnan () หรือไม่? ป.ล. : ฉันอยู่ในMinGW (ถ้านั่นสร้างความแตกต่าง) ฉันได้นี้แก้ไขได้โดยใช้ isNaN () จาก<math.h>ที่ไม่ได้อยู่ใน<cmath>ที่ฉันได้รับ#includeไอเอ็นจีในตอนแรก
368 c++  double  nan 

5
ส่งคืน unique_ptr จากฟังก์ชั่น
unique_ptr<T>ไม่อนุญาตการสร้างสำเนา แต่จะรองรับซีแมนทิกส์ของการย้าย แต่ฉันสามารถคืนค่าunique_ptr<T>จากฟังก์ชันและกำหนดค่าที่ส่งคืนให้กับตัวแปรได้ #include <iostream> #include <memory> using namespace std; unique_ptr<int> foo() { unique_ptr<int> p( new int(10) ); return p; // 1 //return move( p ); // 2 } int main() { unique_ptr<int> p = foo(); cout << *p << endl; return 0; } รหัสข้างต้นรวบรวมและทำงานตามที่ตั้งใจไว้ ดังนั้นบรรทัด1นั้นจะไม่เรียกใช้ตัวสร้างการคัดลอกและทำให้เกิดข้อผิดพลาดของคอมไพเลอร์อย่างไร ถ้าฉันต้องใช้ไลน์2แทนมันก็สมเหตุสมผลดี (การใช้2งานไลน์ก็เช่นกัน แต่เราไม่จำเป็นต้องทำเช่นนั้น) ฉันรู้ว่า …
367 c++  c++11  unique-ptr 

5
รวบรวม C ++ 11 ด้วย g ++
ฉันพยายามอัปเดตคอมไพเลอร์ C ++ เป็น C ++ 11 ฉันค้นหาเล็กน้อยและได้ข้อสรุปว่าฉันต้องใช้ธง-std=c++0xหรือ-std=gnu++0xแต่ฉันไม่รู้อะไรเกี่ยวกับธงหลายอย่าง มีใครช่วยฉันบ้าง (ฉันใช้ Ubuntu 12.04) นี่คือข้อผิดพลาดที่ฉันได้รับจากคอมไพเลอร์เมื่อฉันพยายามใช้ไลบรารี่ซึ่งรวมอยู่ใน C ++ 11 (เช่นอาร์เรย์): #include <array> #include <iostream> int main() { std::array<int, 3> arr = {2, 3, 5}; ... } ไฟล์นี้ต้องการคอมไพเลอร์และการสนับสนุนไลบรารีสำหรับมาตรฐาน ISO C ++ ที่จะมาถึง C ++ 0x ขณะนี้การสนับสนุนนี้อยู่ระหว่างการทดลองและต้องเปิดใช้งานด้วยตัวเลือกคอมไพเลอร์ -std = c ++ 0x หรือ -std = …
367 c++  c++11  g++  flags 

9
ความแตกต่างระหว่างสตริง C ++ == และเปรียบเทียบ ()?
ฉันเพิ่งอ่านคำแนะนำเกี่ยวกับการใช้ std::string s = get_string(); std::string t = another_string(); if( !s.compare(t) ) { แทน if( s == t ) { ฉันเกือบจะใช้อันสุดท้ายเสมอเพราะฉันชินแล้วและรู้สึกเป็นธรรมชาติอ่านง่ายขึ้น ฉันไม่รู้ด้วยซ้ำว่ามีฟังก์ชั่นการเปรียบเทียบแยกต่างหาก เพื่อให้แม่นยำยิ่งขึ้นฉันคิดว่า == จะเรียกการเปรียบเทียบ () อะไรคือความแตกต่าง? ในบริบทใดที่ควรได้รับการสนับสนุนในอีกทางหนึ่ง? ฉันกำลังพิจารณาเฉพาะกรณีที่ฉันต้องรู้ว่าสตริงเป็นค่าเดียวกันกับสตริงอื่น
363 c++  string 

16
แยก (แยก) สตริงใน C ++ โดยใช้ตัวคั่นสตริง (C ++ มาตรฐาน)
ฉันแยกวิเคราะห์สตริงใน C ++ โดยใช้สิ่งต่อไปนี้: using namespace std; string parsed,input="text to be parsed"; stringstream input_stringstream(input); if (getline(input_stringstream,parsed,' ')) { // do some processing. } การแยกวิเคราะห์ด้วยตัวคั่นถ่านเดียวเป็นเรื่องปกติ แต่ถ้าฉันต้องการใช้สตริงเป็นตัวคั่น ตัวอย่าง: ฉันต้องการแยก: scott>=tiger ด้วย>=ตัวคั่นเพื่อที่ฉันจะได้สกอตต์และเสือ
361 c++  parsing  split  token  tokenize 


30
การอ้างอิงที่ไม่ได้กำหนดไปยัง vtable
เมื่อสร้างโปรแกรม C ++ ฉันจะได้รับข้อความแสดงข้อผิดพลาด การอ้างอิงที่ไม่ได้กำหนดถึง 'vtable ... สาเหตุของปัญหานี้คืออะไร? ฉันจะแก้ไขได้อย่างไร มันเกิดขึ้นที่ฉันได้รับข้อผิดพลาดสำหรับโค้ดต่อไปนี้ (คลาสที่เป็นปัญหาคือ CGameModule) และฉันไม่สามารถใช้ชีวิตของฉันได้เข้าใจว่าปัญหาคืออะไร ตอนแรกฉันคิดว่ามันเกี่ยวข้องกับการลืมที่จะให้ร่างกายเสมือนการทำงาน แต่เท่าที่ฉันเข้าใจทุกอย่างอยู่ที่นี่ ห่วงโซ่การสืบทอดมีความยาวเล็กน้อย แต่นี่คือซอร์สโค้ดที่เกี่ยวข้อง ฉันไม่แน่ใจว่าข้อมูลอื่น ๆ ที่ฉันควรให้คืออะไร หมายเหตุ: คอนสตรัคเตอร์เป็นที่ที่ข้อผิดพลาดนี้เกิดขึ้นดูเหมือนว่าจะเกิดขึ้น รหัสของฉัน: class CGameModule : public CDasherModule { public: CGameModule(Dasher::CEventHandler *pEventHandler, CSettingsStore *pSettingsStore, CDasherInterfaceBase *pInterface, ModuleID_t iID, const char *szName) : CDasherModule(pEventHandler, pSettingsStore, iID, 0, szName) { g_pLogger->Log("Inside game …
357 c++  gcc  g++ 

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