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

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

14
เหตุใดตัวชี้ฟังก์ชันและตัวชี้ข้อมูลจึงไม่เข้ากันใน C / C ++
ฉันได้อ่านพบว่าการแปลงตัวชี้ฟังก์ชันเป็นตัวชี้ข้อมูลและในทางกลับกันใช้งานได้กับแพลตฟอร์มส่วนใหญ่ แต่ไม่รับประกันว่าจะใช้งานได้ เหตุใดจึงเป็นเช่นนี้ ทั้งสองไม่ควรเป็นเพียงที่อยู่ในหน่วยความจำหลักดังนั้นจึงเข้ากันได้?


5
ตัวดำเนินการเข้าถึงสมาชิกมากเกินไป ->,. *
ผมเข้าใจมากไปผู้ประกอบการส่วนใหญ่มีข้อยกเว้นของผู้ประกอบการเข้าถึงสมาชิกที่->, .*, ->*ฯลฯ โดยเฉพาะอย่างยิ่งสิ่งที่ส่งผ่านไปยังฟังก์ชันตัวดำเนินการเหล่านี้และสิ่งที่ควรส่งคืน? ฟังก์ชันตัวดำเนินการ (เช่นoperator->(...)) รู้ได้อย่างไรว่าสมาชิกใดถูกอ้างถึง? มันรู้ได้ไหม? มันจำเป็นต้องรู้หรือไม่? สุดท้ายมีข้อพิจารณาใดบ้างที่ต้องนำมาพิจารณา? ตัวอย่างเช่นเมื่อมีการใช้งานมากเกินไปoperator[]โดยทั่วไปคุณจะต้องมีทั้งเวอร์ชัน const และไม่ใช่ const ตัวดำเนินการเข้าถึงสมาชิกต้องการเวอร์ชัน const และ non-const หรือไม่?

2
จะกำหนดขนาดเริ่มต้นของ std :: vector ได้อย่างไร?
ฉันมีvector<CustomClass*>และฉันใส่รายการจำนวนมากในเวกเตอร์และฉันต้องการการเข้าถึงที่รวดเร็วดังนั้นฉันจึงไม่ใช้รายการ จะกำหนดขนาดเริ่มต้นของเวกเตอร์ได้อย่างไร (ตัวอย่างเช่นเป็น 20,000 ตำแหน่งเพื่อหลีกเลี่ยงการคัดลอกเมื่อฉันแทรกใหม่)
130 c++  stl 


10
การส่งต่อการอ้างอิงไปยังพอยน์เตอร์ใน C ++
เท่าที่ฉันสามารถบอกได้ไม่มีเหตุผลใดที่ฉันไม่ควรได้รับอนุญาตให้ส่งการอ้างอิงไปยังตัวชี้ใน C ++ อย่างไรก็ตามความพยายามของฉันล้มเหลวและฉันไม่รู้ว่าทำไม นี่คือสิ่งที่ฉันทำ: void myfunc(string*& val) { // Do stuff to the string pointer } // sometime later { // ... string s; myfunc(&s); // ... } และฉันได้รับข้อผิดพลาดนี้: ไม่สามารถแปลงพารามิเตอร์ 1 จาก 'std :: string *' เป็น 'std :: string * &'
130 c++  pointers  reference 



4
ความแตกต่างระหว่าง std :: make_unique และ std :: unique_ptr กับ new
ไม่std::make_uniqueได้มีผลประโยชน์ใด ๆ เช่นประสิทธิภาพstd::make_shared? เมื่อเทียบกับการสร้างด้วยตนเองstd::unique_ptr: std::make_unique<int>(1); // vs std::unique_ptr<int>(new int(1));

6
ทำไมจำนวนเต็มล้นใน x86 กับ GCC ทำให้เกิดการวนซ้ำไม่สิ้นสุด?
รหัสต่อไปนี้จะเข้าสู่วงวนไม่สิ้นสุดบน GCC: #include <iostream> using namespace std; int main(){ int i = 0x10000000; int c = 0; do{ c++; i += i; cout << i << endl; }while (i > 0); cout << c << endl; return 0; } ดังนั้นนี่คือข้อตกลง: การล้นจำนวนเต็มที่ลงนามคือพฤติกรรมที่ไม่ได้กำหนดทางเทคนิค แต่ GCC บน x86 ใช้เลขคณิตจำนวนเต็มโดยใช้คำแนะนำจำนวนเต็ม x86 - ซึ่งตัดกับโอเวอร์โฟลว์ ดังนั้นฉันคาดหวังว่ามันจะห่อหุ้มด้วยน้ำล้น …
129 c++  c  gcc  x86  undefined-behavior 

6
เหตุใด std :: shared_ptr <void> จึงทำงาน
ฉันพบรหัสบางส่วนโดยใช้ std :: shared_ptr เพื่อทำการล้างข้อมูลโดยพลการเมื่อปิดเครื่อง ตอนแรกฉันคิดว่ารหัสนี้อาจใช้งานไม่ได้ แต่ฉันลองทำสิ่งต่อไปนี้: #include &lt;memory&gt; #include &lt;iostream&gt; #include &lt;vector&gt; class test { public: test() { std::cout &lt;&lt; "Test created" &lt;&lt; std::endl; } ~test() { std::cout &lt;&lt; "Test destroyed" &lt;&lt; std::endl; } }; int main() { std::cout &lt;&lt; "At begin of main.\ncreating std::vector&lt;std::shared_ptr&lt;void&gt;&gt;" &lt;&lt; std::endl; std::vector&lt;std::shared_ptr&lt;void&gt;&gt; v; …
129 c++  c++11  shared-ptr 


11
รับ GDB เพื่อบันทึกรายการเบรกพอยต์
ตกลงการแบ่งข้อมูลจะแสดงรายการเบรกพอยต์ แต่ไม่ใช่ในรูปแบบที่ใช้ได้ดีกับการนำกลับมาใช้ใหม่โดยใช้ - คำสั่งเหมือนในคำถามนี้ GDB มีวิธีการทิ้งลงในไฟล์ที่ยอมรับสำหรับการป้อนข้อมูลอีกครั้งหรือไม่ บางครั้งในเซสชันการดีบักจำเป็นต้องรีสตาร์ท GDB หลังจากสร้างชุดเบรกพอยต์สำหรับการทดสอบ ไฟล์. gdbinit มีปัญหาเหมือนกับ --command ข้อมูลแบ่งคำสั่งไม่ได้แสดงรายการคำสั่ง แต่เป็นโต๊ะสำหรับมนุษย์บริโภค ในการอธิบายอย่างละเอียดนี่คือตัวอย่างจากตัวแบ่งข้อมูล : (gdb) ตัวแบ่งข้อมูล Num Type Disp Enb Address คืออะไร 1 เบรกพอยต์ให้ y 0x08048517 &lt;foo :: bar (โมฆะ) +7&gt;
129 c++  c  debugging  gdb  breakpoints 

7
ความหลากหลายใน C ++
AFAIK: C ++ มีความแตกต่างกันสามประเภท ฟังก์ชันเสมือนจริง ชื่อฟังก์ชันมากเกินไป ตัวดำเนินการมากเกินไป นอกเหนือจากความหลากหลายสามประเภทข้างต้นแล้วยังมีความหลากหลายประเภทอื่น ๆ อีกด้วย: เวลาทำงาน เวลารวบรวม ความแตกต่างแบบเฉพาะกิจ พหุนามพาราเมตริก ฉันรู้ว่าความหลากหลายของรันไทม์สามารถทำได้โดยฟังก์ชันเสมือนจริง และความแตกต่างแบบคงที่สามารถทำได้โดยฟังก์ชันเทมเพลต แต่สำหรับอีกสองคน ความแตกต่างแบบเฉพาะกิจ polymorphism พาราเว็บไซต์กล่าวว่า , โพลีมอร์ฟิซึมเฉพาะกิจ: หากช่วงของประเภทจริงที่สามารถใช้ได้มี จำกัด และต้องระบุชุดค่าผสมทีละรายการก่อนใช้งานสิ่งนี้เรียกว่า ad-hoc polymorphism ความหลากหลายเชิงพาราเมตริก: หากเขียนโค้ดทั้งหมดโดยไม่ระบุประเภทใดประเภทหนึ่งดังนั้นจึงสามารถใช้งานได้อย่างโปร่งใสกับประเภทใหม่ ๆ จำนวนมากเรียกว่าพหุนามพาราเมตริก ฉันแทบไม่เข้าใจพวกเขาเลย :( ใครช่วยอธิบายทั้งสองอย่างด้วยตัวอย่างได้ไหม ฉันหวังว่าคำตอบสำหรับคำถามนี้จะเป็นประโยชน์สำหรับผู้ผ่านการคัดเลือกใหม่จากวิทยาลัยของพวกเขา

7
เพิ่มข้อความที่กำหนดเองในการยืนยัน?
มีวิธีเพิ่มหรือแก้ไขข้อความที่ส่งโดยการยืนยันหรือไม่? ฉันต้องการใช้สิ่งที่ต้องการ assert(a == b, "A must be equal to B"); แล้วคอมไพเลอร์เพิ่มบรรทัด , เวลาและอื่น ๆ ... เป็นไปได้ไหม?
129 c++  assert 

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