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

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

10
สำนวน Pimpl เทียบกับอินเทอร์เฟซคลาสเสมือนจริง
ฉันสงสัยว่าอะไรจะทำให้โปรแกรมเมอร์เลือกสำนวน Pimpl หรือคลาสเสมือนจริงและการสืบทอด ฉันเข้าใจว่าสำนวน pimpl มาพร้อมกับการกำหนดทิศทางพิเศษที่ชัดเจนสำหรับแต่ละวิธีสาธารณะและค่าใช้จ่ายในการสร้างวัตถุ ในทางกลับกันคลาส Pure virtual มาพร้อมกับการกำหนดทิศทางโดยนัย (vtable) สำหรับการใช้งานที่สืบทอดมาและฉันเข้าใจว่าไม่มีค่าใช้จ่ายในการสร้างวัตถุ แก้ไข : แต่คุณต้องมีโรงงานถ้าคุณสร้างวัตถุจากภายนอก อะไรทำให้คลาสเสมือนจริงที่เป็นที่ต้องการน้อยกว่าสำนวน pimpl?

27
CMake ไม่พบคอมไพเลอร์ Visual C ++
หลังจากติดตั้ง Visual Studio 2015 และเรียกใช้ CMake ในโปรเจ็กต์ก่อนหน้าข้อผิดพลาด CMake ที่ระบุว่าไม่พบคอมไพเลอร์ C The C compiler identification is unknown The CXX compiler identification is unknown CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_C_COMPILER could be found. CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_CXX_COMPILER could be found. ฉันไปค้นหาcl.exeในโฟลเดอร์ Visual Studio C:\Program Files\Microsoft Visual Studio 14.0แล้วไม่พบ …

4
คำถามข้อยกเว้น C ++ เกี่ยวกับการเปลี่ยนข้อยกเว้นเดิม
ต่อไปนี้จะผนวก () ในการจับทำให้เกิดข้อยกเว้นอีกครั้งเพื่อดูผลของการผนวก () ที่ถูกเรียกหรือไม่ try { mayThrowMyErr(); } catch (myErr &err) { err.append("Add to my message here"); throw; // Does the rethrow exception reflect the call to append()? } ในทำนองเดียวกันถ้าฉันเขียนใหม่ด้วยวิธีนี้การแบ่งบิตจะเกิดขึ้นหาก myErr มีข้อยกเว้นจริงหรือไม่ try { mayThrowObjectDerivedFromMyErr(); } catch (myErr &err) { err.append("Add to my message's base class here"); throw err; …
118 c++  exception  rethrow 


17
ค่าดีฟอลต์ของพารามิเตอร์ขณะส่งผ่านโดยการอ้างอิงใน C ++
เป็นไปได้หรือไม่ที่จะให้ค่าเริ่มต้นแก่พารามิเตอร์ของฟังก์ชันในขณะที่เรากำลังส่งผ่านพารามิเตอร์โดยการอ้างอิง ใน C ++ ตัวอย่างเช่นเมื่อฉันพยายามประกาศฟังก์ชันเช่น: virtual const ULONG Write(ULONG &State = 0, bool sequence = true); เมื่อฉันทำสิ่งนี้จะทำให้เกิดข้อผิดพลาด: ข้อผิดพลาด C2440: 'อาร์กิวเมนต์เริ่มต้น': ไม่สามารถแปลงจาก 'const int' เป็น 'ยาวที่ไม่ได้ลงนาม &' การอ้างอิงที่ไม่เป็น 'const' ไม่สามารถผูกไว้กับค่าที่ไม่ใช่ lvalue

3
การกำหนดค่า Vim สำหรับ C ++
ฉันต้องการสร้างกลุ่มตัวแก้ไข C ++ ของฉัน ฉันมีประสบการณ์น้อยมากในการทำงานกับมันและต้องการความช่วยเหลือในการกำหนดค่า vim ให้ทำงานกับ C ++ ฉันต้องการคุณสมบัติเช่น รหัสสมบูรณ์ (สำหรับ stl และสำหรับชั้นเรียนของฉัน) สลับระหว่างไฟล์. cc และ. h อาจเป็นกลเม็ดอื่น ๆ ที่คุณผู้เชี่ยวชาญด้าน C ++ และกลุ่มบุคคลมี คุณสามารถให้การกำหนดค่าบางอย่าง (พร้อมคำอธิบาย) หรือลิงก์ไปยังแบบฝึกหัดปลั๊กอินที่ฉันสามารถใช้ประโยชน์ได้?
118 c++  vim  configuration 

4
# รวมใน. h หรือ. c / .cpp?
เมื่อเข้ารหัสด้วย C หรือ C ++ ฉันควรมี#includeที่ไหน callback.h: #ifndef _CALLBACK_H_ #define _CALLBACK_H_ #include <sndfile.h> #include "main.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data); void on_button_cancel_clicked(GtkButton* button, struct user_data_s* data); #endif callback.c: #include <stdlib.h> #include <math.h> #include "config.h" #include "callback.h" #include "play.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data) { gint page; page = …
118 c++  c 

10
ตัวทำลาย C ++ ถูกเรียกเมื่อใด
คำถามพื้นฐาน: โปรแกรมเรียกเมธอดตัวทำลายคลาสใน C ++ เมื่อใด ฉันได้รับแจ้งว่ามันถูกเรียกเมื่อใดก็ตามที่วัตถุอยู่นอกขอบเขตหรืออยู่ภายใต้ไฟล์delete คำถามเฉพาะเพิ่มเติม: 1) หากวัตถุถูกสร้างขึ้นผ่านตัวชี้และตัวชี้นั้นถูกลบในภายหลังหรือกำหนดที่อยู่ใหม่เพื่อชี้ไปยังวัตถุที่ชี้เพื่อเรียกตัวทำลายของมัน (สมมติว่าไม่มีสิ่งอื่นชี้ไปที่มัน)? 2) ติดตามคำถามที่ 1 สิ่งที่กำหนดเมื่อวัตถุอยู่นอกขอบเขต (ไม่เกี่ยวกับเวลาที่วัตถุออกจาก {block} ที่กำหนด) ดังนั้นกล่าวอีกนัยหนึ่งว่าผู้ทำลายถูกเรียกบนวัตถุในรายการที่เชื่อมโยงเมื่อใด 3) คุณต้องการโทรหาผู้ทำลายด้วยตนเองหรือไม่?
118 c++  destructor 

2
เริ่มต้นเวกเตอร์เป็นศูนย์ C ++ / C ++ 11
ฉันรู้ว่าใน C ++ 11 พวกเขาเพิ่มคุณสมบัติเพื่อเริ่มต้นตัวแปรเป็นศูนย์เช่นนี้ double number = {}; // number = 0 int data{}; // data = 0 มีวิธีที่คล้ายกันในการเริ่มต้นstd::vectorความยาวคงที่เป็นศูนย์ทั้งหมดหรือไม่?
118 c++  c++11 

7
ไม่พบหรือเปิดไฟล์ PDB ใน Visual Studio C ++ 2010
ฉันใช้ Visual Studio 2010 C ++ และโครงการของฉันสร้างโดยไม่มีข้อผิดพลาด แต่เมื่อฉันเรียกใช้ฉันได้รับสิ่งนี้ ฉันใช้ Windows XP 'Shaders.exe': Loaded 'C:\Documents and Settings\User\My Documents\Visual Studio 2010\Projects\Shaders\Win32\Debug\Shaders.exe', Symbols loaded. 'Shaders.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Cannot find or open the PDB file 'Shaders.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Cannot find or open the PDB file 'Shaders.exe': Loaded 'C:\qt-everywhere-opensource-src-4.8.3\bin\QtCored4.dll', Symbols loaded. 'Shaders.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Cannot …

4
สำหรับห่วงภายในวงเล็บปีกกาของตัวเอง
ฉันเจอเลย์เอาต์ for-loop นี้: #include <iostream> int main() { { for (int i = 0; i != 10; ++i) { std::cout << "delete i->second;" << std::endl; } } { for (size_t i = 0; i < 20; ++i) { std::cout << "delete m_indices[i];" << std::endl; } } return 0; } ฉันสงสัยว่าการจัดฟันชั้นพิเศษนี้มีไว้เพื่ออะไร? …
117 c++  for-loop  scope 

7
ความถูกต้องตามกฎหมายของ COW std :: การใช้สตริงใน C ++ 11
เป็นความเข้าใจของฉันที่ว่าการคัดลอกเมื่อเขียนไม่ใช่วิธีที่เป็นไปได้std::stringในการนำการปฏิบัติตามC ++ 11 มาใช้ แต่เมื่อมีการอภิปรายเมื่อเร็ว ๆ นี้ฉันพบว่าตัวเองไม่สามารถสนับสนุนคำพูดนั้นได้โดยตรง ฉันถูกต้องหรือไม่ที่ C ++ 11 ไม่ยอมรับการใช้งาน COW ของstd::string? หากเป็นเช่นนั้นข้อ จำกัด นี้มีการระบุไว้อย่างชัดเจนในมาตรฐานใหม่ (ที่ไหน) หรือไม่? หรือข้อ จำกัด นี้โดยนัยในแง่ที่ว่ามันเป็นผลรวมของความต้องการใหม่ในติ๊ดว่าการดำเนินการตามวัวของstd::string std::stringในกรณีนี้ฉันสนใจในบทและรูปแบบกลอนที่มาของ 'C ++ 11 ห้ามใช้std::stringงานCOW อย่างมีประสิทธิภาพ'

6
map เทียบกับ hash_map ใน C ++
ฉันมีคำถามเกี่ยวกับhash_mapและmapใน C ++ ฉันเข้าใจว่าmapอยู่ใน STL แต่hash_mapไม่ใช่มาตรฐาน อะไรคือความแตกต่างระหว่างทั้งสอง?
117 c++  map  hashmap 

3
เหตุใดคอมไพเลอร์ C ++ จึงไม่ปรับการกำหนดบูลีนแบบมีเงื่อนไขนี้ให้เหมาะสมเป็นการมอบหมายแบบไม่มีเงื่อนไข
พิจารณาฟังก์ชันต่อไปนี้: void func(bool& flag) { if(!flag) flag=true; } สำหรับฉันแล้วดูเหมือนว่าหากแฟล็กมีค่าบูลีนที่ถูกต้องสิ่งนี้จะเทียบเท่ากับการตั้งค่าโดยไม่มีเงื่อนไขtrueดังนี้: void func(bool& flag) { flag=true; } ทั้ง gcc หรือ clang ไม่ได้ปรับให้เหมาะสมด้วยวิธีนี้ - ทั้งคู่สร้างสิ่งต่อไปนี้ที่-O3ระดับการเพิ่มประสิทธิภาพ: _Z4funcRb: .LFB0: .cfi_startproc cmp BYTE PTR [rdi], 0 jne .L1 mov BYTE PTR [rdi], 1 .L1: rep ret คำถามของฉันคือรหัสเป็นกรณีพิเศษเกินกว่าที่จะดูแลเพื่อเพิ่มประสิทธิภาพหรือมีเหตุผลที่ดีที่ทำให้การเพิ่มประสิทธิภาพดังกล่าวไม่เป็นที่ต้องการเนื่องจากflagไม่ได้อ้างอิงถึงvolatile? ดูเหมือนว่าเหตุผลเดียวที่อาจเป็นไปได้คือflagอาจมีค่าที่ไม่ใช่trueหรือfalseมูลค่าโดยไม่มีพฤติกรรมที่ไม่ได้กำหนดเมื่ออ่าน แต่ฉันไม่แน่ใจว่าเป็นไปได้หรือไม่
117 c++  optimization 

1
async (launch :: async) ใน C ++ 11 ทำให้เธรดพูลล้าสมัยเนื่องจากหลีกเลี่ยงการสร้างเธรดที่มีราคาแพงหรือไม่
มันเกี่ยวข้องกับคำถามนี้อย่างหลวม ๆ : std :: thread รวมอยู่ใน C ++ 11 หรือไม่? . แม้ว่าคำถามจะแตกต่างกัน แต่ความตั้งใจก็เหมือนกัน: คำถามที่ 1: การใช้เธรดพูลของคุณเอง (หรือไลบรารีของบุคคลที่สาม) เพื่อหลีกเลี่ยงการสร้างเธรดที่มีราคาแพงหรือไม่ ข้อสรุปในคำถามอื่นคือคุณไม่สามารถพึ่งพาstd::threadการรวมกลุ่มกันได้ (อาจเป็นหรือไม่ก็ได้) อย่างไรก็ตามstd::async(launch::async)ดูเหมือนว่าจะมีโอกาสสูงกว่าที่จะถูกรวมกลุ่ม ไม่คิดว่าจะถูกบังคับโดยมาตรฐาน แต่ IMHO ฉันคาดหวังว่าการใช้งาน C ++ 11 ที่ดีทั้งหมดจะใช้การรวมเธรดหากการสร้างเธรดช้า เฉพาะบนแพลตฟอร์มที่มีราคาไม่แพงในการสร้างเธรดใหม่ฉันคาดหวังว่าพวกเขาจะสร้างเธรดใหม่เสมอ คำถาม 2: นี่เป็นเพียงสิ่งที่ฉันคิด แต่ฉันไม่มีข้อเท็จจริงที่จะพิสูจน์ได้ ฉันอาจจะเข้าใจผิด เป็นการคาดเดาที่มีการศึกษาหรือไม่? สุดท้ายนี้ฉันได้ให้โค้ดตัวอย่างที่แสดงให้เห็นก่อนว่าฉันคิดว่าการสร้างเธรดสามารถแสดงได้อย่างไรasync(launch::async): ตัวอย่างที่ 1: thread t([]{ f(); }); // ... t.join(); กลายเป็น auto future …

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