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

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

6
ตั้งค่าเบรกพอยต์ในโค้ด C หรือ C ++ โดยทางโปรแกรมสำหรับ gdb บน Linux
ฉันจะตั้งค่าเบรกพอยต์ในโค้ด C หรือ C ++ โดยทางโปรแกรมที่จะทำงานกับ gdb บน Linux ได้อย่างไร ได้แก่ : int main(int argc, char** argv) { /* set breakpoint here! */ int a = 3; a++; /* In gdb> print a; expect result to be 3 */ return 0; }
107 c++  c  linux  gdb 


8
อะไรคือความแตกต่างระหว่างตัวดำเนินการกำหนดและตัวสร้างการคัดลอก?
ฉันไม่เข้าใจความแตกต่างระหว่างตัวสร้างการกำหนดและตัวสร้างการคัดลอกใน C ++ มันเป็นเช่นนี้: class A { public: A() { cout << "A::A()" << endl; } }; // The copy constructor A a = b; // The assignment constructor A c; c = a; // Is it right? ฉันต้องการทราบวิธีการจัดสรรหน่วยความจำของตัวสร้างการกำหนดและตัวสร้างการคัดลอก?
107 c++  memory 

5
ค่าโสหุ้ยของตัวชี้อัจฉริยะเทียบกับตัวชี้ปกติใน C ++ เป็นเท่าใด
ค่าโสหุ้ยของตัวชี้อัจฉริยะเทียบกับพอยน์เตอร์ปกติใน C ++ 11 เป็นเท่าใด กล่าวอีกนัยหนึ่งรหัสของฉันจะช้าลงหรือไม่หากฉันใช้ตัวชี้อัจฉริยะและถ้าเป็นเช่นนั้นจะช้าลงเท่าใด โดยเฉพาะฉันถามเกี่ยวกับ C ++ 11 std::shared_ptrและstd::unique_ptr. เห็นได้ชัดว่าสิ่งที่ผลักลงในสแต็กจะมีขนาดใหญ่ขึ้น (อย่างน้อยฉันก็คิดอย่างนั้น) เนื่องจากตัวชี้อัจฉริยะจำเป็นต้องเก็บสถานะภายในไว้ด้วย (จำนวนอ้างอิง ฯลฯ ) คำถามก็คือสิ่งนี้จะเป็นเท่าใด ส่งผลกระทบต่อประสิทธิภาพการทำงานของฉันหรือไม่ ตัวอย่างเช่นฉันส่งคืนตัวชี้อัจฉริยะจากฟังก์ชันแทนที่จะเป็นตัวชี้ปกติ: std::shared_ptr<const Value> getValue(); // versus const Value *getValue(); หรือตัวอย่างเช่นเมื่อฟังก์ชันหนึ่งของฉันยอมรับตัวชี้อัจฉริยะเป็นพารามิเตอร์แทนที่จะเป็นตัวชี้ปกติ: void setValue(std::shared_ptr<const Value> val); // versus void setValue(const Value *val);

7
เหตุใดจึงนิยมใช้ 'ความแตกต่างแบบบริสุทธิ์' มากกว่าการใช้ RTTI
ทรัพยากร C ++ เกือบทั้งหมดที่ฉันเคยเห็นที่พูดถึงเรื่องประเภทนี้บอกฉันว่าฉันควรใช้วิธีการหลายรูปแบบในการใช้ RTTI (การระบุประเภทรันไทม์) โดยทั่วไปแล้วฉันให้คำแนะนำแบบนี้อย่างจริงจังและจะพยายามทำความเข้าใจกับเหตุผล - ท้ายที่สุด C ++ เป็นสัตว์ร้ายที่ยิ่งใหญ่และยากที่จะเข้าใจในเชิงลึกทั้งหมด อย่างไรก็ตามสำหรับคำถามเฉพาะนี้ฉันกำลังวาดภาพว่างและต้องการดูว่าอินเทอร์เน็ตสามารถให้คำแนะนำประเภทใดได้บ้าง ก่อนอื่นให้ฉันสรุปสิ่งที่ฉันได้เรียนรู้จนถึงตอนนี้โดยระบุสาเหตุทั่วไปที่อ้างว่าทำไม RTTI จึง "ถือว่าเป็นอันตราย": คอมไพเลอร์บางตัวไม่ใช้มัน / RTTI ไม่ได้เปิดใช้งานเสมอไป ฉันไม่ซื้อข้อโต้แย้งนี้จริงๆ เหมือนกับการบอกว่าฉันไม่ควรใช้ฟีเจอร์ C ++ 14 เพราะมีคอมไพเลอร์ที่ไม่รองรับ แต่ก็ไม่มีใครกีดกันฉันจากการใช้คุณสมบัติ C ++ 14 โครงการส่วนใหญ่จะมีอิทธิพลเหนือคอมไพเลอร์ที่ใช้และวิธีกำหนดค่า แม้แต่การอ้างถึง manpage gcc: -fno-rtti ปิดใช้งานการสร้างข้อมูลเกี่ยวกับทุกคลาสด้วยฟังก์ชันเสมือนสำหรับใช้โดยคุณลักษณะการระบุชนิดรันไทม์ C ++ (dynamic_cast และ typeid) หากคุณไม่ได้ใช้ส่วนเหล่านั้นของภาษาคุณสามารถประหยัดพื้นที่ได้โดยใช้แฟล็กนี้ โปรดทราบว่าการจัดการข้อยกเว้นจะใช้ข้อมูลเดียวกัน แต่ G ++ สร้างขึ้นตามความจำเป็น ยังคงใช้ตัวดำเนินการ dynamic_cast …
106 c++  polymorphism  rtti 

3
ความสำคัญของการเริ่มต้นอาร์เรย์ทิศทางด้านล่างด้วยค่าที่กำหนดเมื่อพัฒนาโปรแกรมหมากรุกคืออะไร?
ฉันยังใหม่กับการเขียนโปรแกรมเชิงแข่งขันและฉันสังเกตเห็นบ่อยครั้งว่า coders ที่ยอดเยี่ยมหลายตัวมีสี่บรรทัดนี้ในโค้ด (โดยเฉพาะอย่างยิ่งในส่วนที่เกี่ยวข้องกับอาร์เรย์): int di[] = { 1, -1, 0, 0, 1, -1, 1, -1 }; int dj[] = { 0, 0, 1, -1, 1, -1, -1, 1 }; int diK[] = { -2, -2, -1, 1, 2, 2, 1, -1 }; int djK[] = { -1, 1, 2, …
106 c++  c  chess 

3
std :: shared_ptr เธรดปลอดภัยอธิบาย
ฉันกำลังอ่านhttp://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.htmlและปัญหาด้านความปลอดภัยของเธรดยังไม่ชัดเจนสำหรับฉัน: มาตรฐานรับประกันว่าการนับอ้างอิงได้รับการจัดการเธรดอย่างปลอดภัยและเป็นอิสระจากแพลตฟอร์มใช่ไหม ปัญหาที่คล้ายกัน - มาตรฐานรับประกันว่าเธรดเดียวเท่านั้น (ถือการอ้างอิงสุดท้าย) จะเรียกลบในวัตถุที่แชร์ใช่ไหม shared_ptr ไม่รับประกันความปลอดภัยของเธรดใด ๆ สำหรับอ็อบเจ็กต์ที่เก็บอยู่ในนั้น? แก้ไข: รหัสหลอก: // Thread I shared_ptr<A> a (new A (1)); // Thread II shared_ptr<A> b (a); // Thread III shared_ptr<A> c (a); // Thread IV shared_ptr<A> d (a); d.reset (new A (10)); การเรียกการรีเซ็ต () ในเธรด IV จะลบอินสแตนซ์ก่อนหน้าของคลาส A ที่สร้างในเธรดแรกและแทนที่ด้วยอินสแตนซ์ใหม่? …
106 c++  c++11  shared-ptr 

5
ดีบักเกอร์ Linux C / C ++ ใดที่ดีที่สุด (หรือ front-end to gdb) เพื่อช่วยสอนการเขียนโปรแกรม [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันสอนหลักสูตรการเขียนโปรแกรม C ++ แบบ "lite" ให้กับมือใหม่ ("lite" หมายถึงไม่มีพอยน์เตอร์ไม่มีคลาสเป็น C แบบเก่าธรรมดารวมถึงการอ้างอิงและสตริง STL และเวกเตอร์) นักเรียนไม่มีประสบการณ์ในการเขียนโปรแกรมมาก่อนดังนั้นฉันเชื่อว่าการใช้ดีบักเกอร์แบบโต้ตอบจะช่วยให้พวกเขาเข้าใจโฟลว์โปรแกรมตัวแปรและการเรียกซ้ำ หลักสูตรนี้สอนใน Linux การสอนให้ใช้ gdb เป็นเพียงการใช้งานมากเกินไป (จะไม่ใช้หรือไม่เข้าใจคุณสมบัติส่วนใหญ่) ฉันต้องการสิ่งที่เรียบง่าย แต่ใช้งานง่าย: เพื่อดูว่าตอนนี้โปรแกรมอยู่ที่บรรทัดใดสิ่งที่อยู่ในสแต็ก (ตัวแปรท้องถิ่นการเรียกก่อนหน้า ฯลฯ ) ฉันดูคล้ายกับตัวดีบักเกอร์ของ Turbo Pascal หรือ Turbo C ++ Borland หรือตัวแก้ไขข้อบกพร่อง Visual Studio ขอบคุณ,
106 c++  linux  debugging 

3
ความแตกต่างระหว่าง CC, gcc และ g ++?
อะไรคือความแตกต่างระหว่าง 3 คอมไพเลอร์ CC, gcc, g ++ เมื่อคอมไพล์โค้ด C และ C ++ ในแง่ของการสร้างโค้ดแอสเซมบลีไลบรารีที่พร้อมใช้งานคุณสมบัติภาษา ฯลฯ
106 c++  c  gcc  compilation 

2
ซอร์สโค้ดมอบอำนาจ C ++ 20 ถูกเก็บไว้ในไฟล์หรือไม่
คำถามแปลก ๆ เล็กน้อยคือถ้าฉันจำไม่ผิดซอร์สโค้ด C ++ ไม่ต้องการระบบไฟล์ในการจัดเก็บไฟล์ การมีคอมไพเลอร์ที่สแกนเอกสารที่เขียนด้วยลายมือผ่านกล้องจะเป็นการใช้งานที่สอดคล้องกัน แม้ว่าในทางปฏิบัติจะไม่สมเหตุสมผลมากนัก อย่างไรก็ตาม C ++ 20 ตอนนี้เพิ่มตำแหน่งต้นทางด้วยfile_name. ตอนนี้หมายความว่าซอร์สโค้ดควรเก็บไว้ในไฟล์หรือไม่

5
VST Plugins สร้างขึ้นมาได้อย่างไร?
ฉันต้องการสร้าง (หรือเรียนรู้วิธีการสร้าง) ปลั๊กอิน VST มี SDK พิเศษสำหรับสิ่งนี้หรือไม่? วิธีหนึ่งให้ผลตอบแทนเป็น. vst แทนที่จะเป็น. exe นอกจากนี้หากใครต้องการสร้าง Audio Units สำหรับ Logic Pro จะทำได้อย่างไร? ขอบคุณ
106 c++  audio  vst 

4
ตัวเปรียบเทียบแบบโปร่งใสคืออะไร?
ใน C ++ 14 ดูเหมือนว่า Associative container จะเปลี่ยนไปจาก C ++ 11 - [Associative.reqmts] / 13 พูดว่า: แม่แบบฟังก์ชันสมาชิกfind, count, lower_bound, upper_boundและequal_rangeจะได้มีส่วนร่วมในการแก้ปัญหาเกินเว้นแต่ชนิดCompare::is_transparentที่มีอยู่ จุดประสงค์ของการสร้างตัวเปรียบเทียบ "โปร่งใส" คืออะไร? C ++ 14 ยังมีเทมเพลตไลบรารีเช่นนี้: template <class T = void> struct less { constexpr bool operator()(const T& x, const T& y) const; typedef T first_argument_type; typedef T second_argument_type; …
106 c++  c++14  c++-faq 

7
เรียกคืนสถานะของ std :: cout หลังจากจัดการมัน
สมมติว่าฉันมีรหัสดังนี้: void printHex(std::ostream& x){ x<<std::hex<<123; } .. int main(){ std::cout<<100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout<<73; //problem! prints 73 in hex.. } คำถามของฉันคือมีวิธีใดในการ 'กู้คืน' สถานะกลับเป็นสถานะcoutเดิมหลังจากกลับจากฟังก์ชันหรือไม่? (ค่อนข้างเหมือนstd::boolalphaและstd::noboolalpha.. )? ขอบคุณ.
106 c++  iostream 

19
ข้อผิดพลาด CMake ที่ CMakeLists.txt: 30 (โครงการ): ไม่พบ CMAKE_C_COMPILER
ฉันกำลังพยายามสร้างโซลูชัน Visual Studio ด้วย CMake เพื่อรวบรวม aseprite เวอร์ชันล่าสุดและ CMake ให้ฉัน: No CMAKE_C_COMPILER could be found. No CMAKE_CXX_COMPILER could be found. ผมได้ดาวน์โหลดแล้ว GCC และฉันใช้Visual Studio 2015 ฉันกำลังติดตามบทช่วยสอนนี้: https://github.com/aseprite/aseprite/blob/master/INSTALL.md

2
กลไกของการเพิ่มประสิทธิภาพสตริงสั้นใน libc ++ คืออะไร?
คำตอบนี้ให้ภาพรวมระดับสูงที่ดีของการเพิ่มประสิทธิภาพสตริงสั้น (SSO) อย่างไรก็ตามฉันต้องการทราบรายละเอียดเพิ่มเติมว่ามันทำงานอย่างไรในทางปฏิบัติโดยเฉพาะในการใช้งาน libc ++: สตริงต้องสั้นแค่ไหนจึงจะมีคุณสมบัติเป็น SSO สิ่งนี้ขึ้นอยู่กับสถาปัตยกรรมเป้าหมายหรือไม่? การใช้งานแยกความแตกต่างระหว่างสตริงแบบสั้นและแบบยาวเมื่อเข้าถึงข้อมูลสตริงอย่างไร มันง่ายเหมือนm_size <= 16หรือเป็นแฟล็กที่เป็นส่วนหนึ่งของตัวแปรสมาชิกอื่น ๆ หรือไม่? (ฉันคิดว่าm_sizeหรือบางส่วนอาจใช้ในการจัดเก็บข้อมูลสตริง) ผมถามคำถามนี้มาโดยเฉพาะสำหรับ libc ++ เพราะฉันรู้ว่ามันใช้ SSO นี้ถูกกล่าวถึงแม้ในlibc ++ หน้าแรก นี่คือข้อสังเกตบางประการหลังจากดูที่มา : libc ++ สามารถคอมไพล์โดยมีเลย์เอาต์หน่วยความจำที่แตกต่างกันเล็กน้อยสำหรับคลาสสตริงซึ่งถูกควบคุมโดย_LIBCPP_ALTERNATE_STRING_LAYOUTแฟล็ก เค้าโครงทั้งสองยังแยกความแตกต่างระหว่างเครื่องจักรเล็ก ๆ น้อย ๆ และเครื่องใหญ่เอนด์เซียนซึ่งทำให้เรามีรูปแบบต่างๆทั้งหมด 4 แบบ ฉันจะถือว่าเค้าโครง "ปกติ" และ endian น้อยในสิ่งต่อไปนี้ สมมติว่าต่อไปsize_typeคือ 4 ไบต์และนั่นvalue_typeคือ 1 ไบต์นี่คือลักษณะของสตริง 4 ไบต์แรกในหน่วยความจำ: // short string: …

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