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

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

3
ความแตกต่างระหว่าง C ++ 03 throw () specifier C ++ 11 noexcept
มีความแตกต่างระหว่าง throw()และnoexceptอื่น ๆ นอกเหนือจากการตรวจสอบที่รันไทม์และรวบรวมเวลาตามลำดับ? บทความ Wikipedia C ++ 11 นี้ชี้ให้เห็นว่าตัวระบุการโยน C ++ 03 เลิกใช้งานแล้ว เหตุใดจึงมีnoexceptความสามารถเพียงพอที่จะครอบคลุมทุกสิ่งในเวลาคอมไพล์ [หมายเหตุ: ฉันตรวจสอบคำถามนี้และบทความนี้แล้ว แต่ไม่สามารถระบุเหตุผลที่ชัดเจนในการเลิกใช้งานได้]
100 c++  exception  c++11  throw  noexcept 

9
แทนที่ฟังก์ชันเสมือน C ++ อย่างปลอดภัย
ฉันมีคลาสพื้นฐานที่มีฟังก์ชันเสมือนและฉันต้องการแทนที่ฟังก์ชันนั้นในคลาสที่ได้รับ มีวิธีใดบ้างที่จะทำให้คอมไพลเลอร์ตรวจสอบว่าฟังก์ชันที่ฉันประกาศในคลาสที่ได้รับมาแทนที่ฟังก์ชันในคลาสฐานหรือไม่? ฉันต้องการเพิ่มมาโครหรือสิ่งที่ช่วยให้มั่นใจได้ว่าฉันไม่ได้ประกาศฟังก์ชันใหม่โดยไม่ได้ตั้งใจแทนที่จะแทนที่ฟังก์ชันเก่า ใช้ตัวอย่างนี้: class parent { public: virtual void handle_event(int something) const { // boring default code } }; class child : public parent { public: virtual void handle_event(int something) { // new exciting code } }; int main() { parent *p = new child(); p->handle_event(1); } ที่นี่parent::handle_event()เรียกว่าแทนchild::handle_event()เนื่องจากวิธีการของเด็กพลาดการconstประกาศจึงประกาศวิธีการใหม่ นี่อาจเป็นการพิมพ์ผิดในชื่อฟังก์ชันหรือความแตกต่างเล็กน้อยในประเภทพารามิเตอร์ …

7
std :: string :: c_str () อายุการใช้งานคืออะไร?
ในโปรแกรมของฉันฉันต้องเชื่อมต่อกับรหัสเดิมที่ใช้งานconst char*ได้ สมมติว่าฉันมีโครงสร้างที่ดูเหมือน: struct Foo { const char* server; const char* name; }; แอปพลิเคชันระดับสูงกว่าของฉันเกี่ยวข้องเท่านั้นstd::stringดังนั้นฉันจึงคิดที่std::string::c_str()จะใช้เพื่อรับconst char*ตัวชี้กลับ แต่อายุการใช้งานc_str()คืออะไร? ฉันสามารถทำสิ่งนี้โดยไม่ต้องเผชิญกับพฤติกรรมที่ไม่ได้กำหนดได้หรือไม่? { std::string server = "my_server"; std::string name = "my_name"; Foo foo; foo.server = server.c_str(); foo.name = name.c_str(); // We use foo use_foo(foo); // Foo is about to be destroyed, before name and server …
100 c++  string  cstring 

3
การใช้งาน gcc std :: unordered_map ช้าหรือไม่ ถ้าเป็นเช่นนั้น - ทำไม?
เรากำลังพัฒนาซอฟต์แวร์สำคัญที่มีประสิทธิภาพสูงใน C ++ ที่นั่นเราต้องมีแผนที่แฮชพร้อมกันและนำไปใช้ std::unordered_mapดังนั้นเราจึงเขียนมาตรฐานที่จะคิดออกเท่าไหร่ช้ากว่าแผนที่กัญชาพร้อมกันของเราจะถูกเมื่อเทียบกับ แต่std::unordered_mapดูเหมือนว่าจะไม่น่าเชื่อช้า ... ดังนั้นนี้เป็นของเราไมโครมาตรฐาน (สำหรับแผนที่พร้อมกันเรากลับกลายเป็นหัวข้อใหม่เพื่อให้แน่ใจว่าการล็อคไม่ได้รับการปรับให้เหมาะสมออกไปและทราบว่าฉันไม่เคย Inser 0 เพราะผมยังมาตรฐานด้วยgoogle::dense_hash_map, ซึ่งต้องการค่า null): boost::random::mt19937 rng; boost::random::uniform_int_distribution<> dist(std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max()); std::vector<uint64_t> vec(SIZE); for (int i = 0; i < SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map<int, long …

2
ความแตกต่างระหว่าง std :: result_of และ Decltype
ฉันมีปัญหาในการทำความเข้าใจความจำเป็นstd::result_ofใน C ++ 0x ถ้าฉันเข้าใจถูกต้องresult_ofใช้เพื่อรับชนิดผลลัพธ์ของการเรียกใช้อ็อบเจ็กต์ฟังก์ชันด้วยพารามิเตอร์บางประเภท ตัวอย่างเช่น: template <typename F, typename Arg> typename std::result_of<F(Arg)>::type invoke(F f, Arg a) { return f(a); } ฉันไม่เห็นความแตกต่างกับรหัสต่อไปนี้: template <typename F, typename Arg> auto invoke(F f, Arg a) -> decltype(f(a)) //uses the f parameter { return f(a); } หรือ template <typename F, typename Arg> auto invoke(F …
100 c++  c++11  decltype  result-of 

3
วิธีรับตำแหน่งขององค์ประกอบบางอย่างในเวกเตอร์สตริงเพื่อใช้เป็นดัชนีในเวกเตอร์ ints
ฉันกำลังพยายามหาดัชนีขององค์ประกอบในเวกเตอร์ของstringsเพื่อใช้เป็นดัชนีในเวกเตอร์intประเภทอื่นเป็นไปได้หรือไม่ ตัวอย่าง: vector <string> Names; vector <int> Numbers; ... // condition to check whether the name exists or not if((find(Names.begin(), Names.end(), old_name_)) != Names.end()) { // if yes cout <<"Enter the new name."<< endl; cin >> name; replace(Names.begin(), Names.end(), old_name_, name); } ตอนนี้ผมต้องการที่จะได้รับตำแหน่งของold_nameในNamesเวกเตอร์ที่จะใช้ในการเข้าถึงองค์ประกอบบางอย่างในNumbersเวกเตอร์ เพื่อที่ฉันจะได้พูดว่า: Numbers[position] = 3 ; // or …
100 c++ 

8
วิธีการเชื่อมสองสตริงใน C ++?
ฉันมีตัวแปรคลาสส่วนตัวchar name[10]ที่ฉันต้องการเพิ่ม.txtส่วนขยายเพื่อให้ฉันสามารถเปิดไฟล์ที่มีอยู่ในไดเร็กทอรี ฉันจะไปเกี่ยวกับเรื่องนี้ได้อย่างไร? ควรสร้างตัวแปรสตริงใหม่ที่เก็บสตริงที่ต่อกัน
100 c++ 

4
ฉันควรใช้ fabs เมื่อใดและเมื่อใดจึงเพียงพอที่จะใช้ std :: abs
ฉันคิดว่าabsและมีพฤติกรรมที่แตกต่างกันเมื่อใช้fabs math.hแต่เมื่อฉันใช้เพียงcmathและstd::absฉันต้องใช้std::fabsหรือfabs? หรือไม่ได้กำหนดไว้?
100 c++  math.h  cmath 

12
ตัวประมวลผลล่วงหน้า C ++ __VA_ARGS__ จำนวนอาร์กิวเมนต์
คำถามง่ายๆที่หาคำตอบในเน็ตไม่ได้ ในมาโครอาร์กิวเมนต์ตัวแปรจะหาจำนวนอาร์กิวเมนต์ได้อย่างไร ฉันโอเคกับบูสต์พรีโปรเซสเซอร์หากมีวิธีแก้ปัญหา ถ้ามันสร้างความแตกต่างฉันกำลังพยายามแปลงจำนวนอาร์กิวเมนต์มาโครที่แปรผันเพื่อเพิ่มลำดับตัวประมวลผลล่วงหน้ารายการหรืออาร์เรย์สำหรับการประมวลผลใหม่เพิ่มเติม

6
การเริ่มต้นอาร์เรย์สมาชิกในตัวสร้างเริ่มต้น
class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; }; ฉันเชื่อว่าเหตุผลคืออาร์เรย์สามารถเริ่มต้นด้วย=ไวยากรณ์เท่านั้นนั่นคือ: int arr[3] = {1,3,4}; คำถาม ฉันจะทำสิ่งที่ต้องการได้อย่างไร (นั่นคือเริ่มต้นอาร์เรย์ในตัวสร้าง (ไม่ได้กำหนดองค์ประกอบในเนื้อความ)) เป็นไปได้หรือไม่? มาตรฐาน C ++ 03 พูดอะไรเป็นพิเศษเกี่ยวกับการเริ่มต้นการรวม (รวมถึงอาร์เรย์) ใน ctor initializers หรือไม่ หรือความไม่ถูกต้องของรหัสข้างต้นเป็นข้อพิสูจน์ของกฎอื่น ๆ ? รายการเริ่มต้น C ++ 0x …

5
ฉันจะทำให้งานสร้างของ Visual Studio มีรายละเอียดมากได้อย่างไร
ฉันจำเป็นต้องระงับทุกแฟล็กทุกสวิตช์ที่ใช้ในกระบวนการสร้างโดยไบนารี Visual Studio ฉันพยายามรับเอาท์พุตแบบละเอียดโดยใช้vcbuildแต่ฉันไม่สามารถทำได้ ฉันต้องทำอย่างไรเพื่อดูทุกอย่างที่แสดงโดย Visual Studio สำหรับฉัน ไม่จำเป็นต้องรับเอาต์พุตในหน้าต่างบิลด์ ที่ไหนก็ได้จะดี


12
การลบรายการออกจากเวกเตอร์ในขณะที่อยู่ใน C ++ 11 ช่วง 'for' loop?
ฉันมีเวกเตอร์ของ IInventory * และฉันกำลังวนรอบรายการโดยใช้ช่วง C ++ 11 เพื่อทำสิ่งต่างๆกับแต่ละอัน หลังจากดำเนินการบางอย่างแล้วฉันอาจต้องการลบออกจากรายการและลบวัตถุนั้น ฉันรู้ว่าฉันสามารถเรียกdeleteตัวชี้ได้ทุกเมื่อเพื่อทำความสะอาด แต่วิธีใดที่เหมาะสมในการลบออกจากเวกเตอร์ในขณะที่อยู่ในforลูปช่วง และถ้าฉันลบมันออกจากรายการลูปของฉันจะเป็นโมฆะหรือไม่? std::vector<IInventory*> inv; inv.push_back(new Foo()); inv.push_back(new Bar()); for (IInventory* index : inv) { // Do some stuff // OK, I decided I need to remove this object from 'inv'... }
100 c++  vector  for-loop  c++11 

3
การล้างบัฟเฟอร์หมายถึงอะไร?
ฉันกำลังเรียนรู้ C ++ และพบบางสิ่งที่ฉันไม่เข้าใจ: บัฟเฟอร์เอาต์พุตสามารถล้างออกได้อย่างชัดเจนเพื่อบังคับให้เขียนบัฟเฟอร์ โดยค่าเริ่มต้นการอ่านcinวูบวาบcout; coutจะถูกล้างเมื่อโปรแกรมสิ้นสุดตามปกติ ดังนั้นการล้างบัฟเฟอร์ (ตัวอย่างเช่นบัฟเฟอร์เอาต์พุต): การดำเนินการนี้จะล้างบัฟเฟอร์โดยการลบทุกอย่างในนั้นหรือล้างบัฟเฟอร์โดยการส่งออกทุกอย่างในนั้น? หรือการล้างบัฟเฟอร์หมายถึงสิ่งที่แตกต่างอย่างสิ้นเชิง?
100 c++  input  buffer  output  flush 

11
ข้อผิดพลาดร้ายแรง:“ ไม่มีสถาปัตยกรรมเป้าหมาย” ใน Visual Studio
เมื่อฉันพยายามรวบรวมโครงการ c ++ โดยใช้ Visual Studio 2010 ในโหมด Win32 หรือ x64 ฉันได้รับข้อผิดพลาดต่อไปนี้: >C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture" คำจำกัดความของตัวประมวลผลก่อนหน้าของฉันกล่าวว่า WIN32; _DEBUG; _CONSOLE;% (PreprocessorDefinitions) อะไรเป็นสาเหตุของข้อผิดพลาดนี้และฉันจะแก้ไขได้อย่างไร // winnt.h: lines 127-136, MSVS says this is an inactive preprocessor block #if defined(_WIN64) #if defined(_AMD64_) #define PROBE_ALIGNMENT( _s ) …

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