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

จัดทำ C ++ FAQ ที่ทำงานร่วมกันและแก้ไขโดยชุมชน

2
"ระยะเวลา" คืออะไรและฉันควรใช้เมื่อใด
เมื่อเร็ว ๆ นี้ฉันได้รับคำแนะนำให้ใช้span<T>ในโค้ดของฉันหรือเคยเห็นคำตอบบางอย่างในเว็บไซต์ซึ่งใช้spanคอนเทนเนอร์บางชนิด แต่ - ฉันไม่พบอะไรอย่างนั้นในไลบรารีมาตรฐาน C ++ 17 ดังนั้นสิ่งนี้ลึกลับspan<T>และทำไม (หรือเมื่อ) มันเป็นความคิดที่ดีที่จะใช้มันถ้ามันไม่ได้มาตรฐาน?

4
ฉันควรใช้ตัวชี้ประเภทใดเมื่อใด
ตกลงดังนั้นครั้งสุดท้ายที่ฉันเขียน C ++ เพื่อหาเลี้ยงชีพ std::auto_ptrคือ std lib ทั้งหมดที่มีอยู่และboost::shared_ptrเป็นความเดือดดาลทั้งหมด ฉันไม่เคยมองไปที่การเพิ่มประเภทตัวชี้อัจฉริยะอื่น ๆ ฉันเข้าใจว่าตอนนี้ C ++ 11 มีการเพิ่มประเภทบางอย่าง แต่ไม่ใช่ทั้งหมด ดังนั้นใครบางคนจึงมีอัลกอริทึมง่าย ๆ ในการพิจารณาว่าจะใช้ตัวชี้สมาร์ทตัวไหน ควรรวมถึงคำแนะนำเกี่ยวกับพอยน์เตอร์พอยน์เตอร์ (พอยน์เตอร์ดิบเช่นT*) และสมาร์ทพอยน์เตอร์ที่เหลือ (บางอย่างเช่นนี้จะดีมาก)

11
ทำไมการอ้างอิงที่ไม่ใช่สมาชิกไม่สามารถผูกกับวัตถุชั่วคราวได้?
ทำไมมันไม่ได้รับอนุญาตให้รับการอ้างอิงที่ไม่ใช่ const ไปยังวัตถุชั่วคราวซึ่งฟังก์ชั่นgetx()ส่งกลับ? เห็นได้ชัดว่านี่เป็นสิ่งต้องห้ามตามมาตรฐาน C ++ แต่ฉันสนใจในวัตถุประสงค์ของข้อ จำกัด ดังกล่าวไม่ใช่การอ้างอิงถึงมาตรฐาน struct X { X& ref() { return *this; } }; X getx() { return X();} void g(X & x) {} int f() { const X& x = getx(); // OK X& x = getx(); // error X& x = getx().ref(); // …



3
ตัวดำเนินการ <=> ใน C ++ คืออะไร
ขณะที่ผมกำลังพยายามที่จะเรียนรู้เกี่ยวกับภาษา C ++ผู้ประกอบการที่ฉัน stumbled เมื่อดำเนินการเปรียบเทียบที่ผิดปกติในcppreference.com , *ในตารางที่มองเช่นนี้: "เอาล่ะถ้านี่เป็นโอเปอเรเตอร์ทั่วไปใน C ++ ฉันควรจะเรียนรู้" แต่ความพยายามทั้งหมดของฉันที่จะอธิบายความลึกลับนี้ไม่ประสบความสำเร็จ แม้แต่ที่นี่ใน Stack Overflow ฉันไม่มีโชคในการค้นหาของฉัน มีการเชื่อมต่อระหว่าง&lt;=&gt;และC ++หรือไม่ และถ้ามีตัวดำเนินการนี้ทำอะไรกันแน่ * ในระหว่างนี้ cppreference.com ได้อัพเดตหน้านั้นและตอนนี้มีข้อมูลเกี่ยวกับ&lt;=&gt;ผู้ให้บริการ

11
พฤติกรรมที่ไม่ได้กำหนดทั่วไปทั้งหมดที่โปรแกรมเมอร์ C ++ ควรรู้คืออะไร [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน7 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ พฤติกรรมที่ไม่ได้กำหนดทั่วไปทั้งหมดที่โปรแกรมเมอร์ C ++ ควรรู้คืออะไร พูดเช่น: a[i] = i++;

3
เหตุใดฉันจึงต้องเข้าถึงสมาชิกคลาสฐานแม่แบบผ่านตัวชี้นี้
หากคลาสด้านล่างไม่ใช่เทมเพลตฉันสามารถมีได้เฉพาะxในderivedคลาส แต่ด้วยรหัสข้างล่างนี้ผมต้องthis-&gt;xใช้ ทำไม? template &lt;typename T&gt; class base { protected: int x; }; template &lt;typename T&gt; class derived : public base&lt;T&gt; { public: int f() { return this-&gt;x; } }; int main() { derived&lt;int&gt; d; d.f(); return 0; }

30
วิธีหยุดแอปพลิเคชันคอนโซล C ++ ออกจากทันทีหรือไม่
เมื่อเร็ว ๆ นี้ฉันพยายามเรียนรู้ C ++ จากเว็บไซต์นี้ น่าเสียดายที่เมื่อใดก็ตามที่ฉันพยายามเรียกใช้หนึ่งในตัวอย่างของรหัสฉันเห็นว่าโปรแกรมนั้นเปิดประมาณครึ่งวินาทีแล้วปิดทันที มีวิธีหยุดโปรแกรมไม่ให้ปิดทันทีหรือไม่เพื่อที่ฉันจะได้เห็นผลของความพยายามของฉัน?
193 c++  console  exit  terminate  c++-faq 

9
สำนวน C ++ ใดเลิกใช้ใน C ++ 11
ด้วยมาตรฐานใหม่มีวิธีการใหม่ในการทำสิ่งต่าง ๆ และหลายวิธีก็ดีกว่าแบบเก่า แต่วิธีเก่ายังคงใช้ได้ เป็นที่ชัดเจนว่ามาตรฐานใหม่ไม่ได้คัดค้านอย่างเป็นทางการมากนักเนื่องจากเหตุผลด้านความเข้ากันได้แบบย้อนหลัง ดังนั้นคำถามที่เหลืออยู่คือ: วิธีการเข้ารหัสแบบเก่า ๆ นั้นด้อยกว่า C ++ 11 สไตล์แน่นอนและตอนนี้เราจะทำอะไรได้บ้าง? ในการตอบคำถามนี้คุณอาจข้ามสิ่งที่ชัดเจนเช่น "ใช้ตัวแปรอัตโนมัติ"
192 c++  c++11  c++-faq 

2
วลีต่อไปนี้หมายความว่าอย่างไรใน C ++: zero-, default- และ value-initialization
วลีต่อไปนี้หมายความว่าอย่างไรใน C ++: ศูนย์การเริ่มต้น การกำหนดค่าเริ่มต้นและ มูลค่าเริ่มต้น นักพัฒนา C ++ ควรรู้อะไรเกี่ยวกับพวกเขาบ้าง


2
เหตุใดตัวชี้ 'this' จึงไม่ใช่ตัวอ้างอิง
ฉันกำลังอ่านคำตอบสำหรับคำถามนี้ข้อดีและข้อเสีย C ++และมีข้อสงสัยนี้ในขณะที่อ่านความคิดเห็น โปรแกรมเมอร์มักพบว่าสับสนว่า "นี่" เป็นตัวชี้ แต่ไม่ใช่การอ้างอิง ความสับสนอีกอย่างคือทำไม "hello" ไม่ใช่ type std :: string แต่ประเมินเป็น char const * (ตัวชี้) (หลังจากการแปลงอาเรย์เป็นตัวชี้) - Johannes Schaub - litb 22 ธันวาคม 2008 เวลา 1:56 นั่นแสดงให้เห็นว่ามันไม่ได้ใช้แบบแผนเดียวกับภาษาอื่น ๆ (ในภายหลัง) - เลอ dorfier 22 ธันวาคม '08 ที่ 3:35 ฉันจะเรียกสิ่งนี้ว่า "ปัญหาเล็กน้อย" และอุ๊ปส์ขอบคุณสำหรับการจับข้อผิดพลาดเล็กน้อยในตัวอย่างของพฤติกรรมที่ไม่ได้กำหนด :) ถึงแม้ว่าฉันไม่เข้าใจว่าข้อมูลเกี่ยวกับขนาดเกี่ยวข้องกับอะไรในข้อมูลแรก ตัวชี้ไม่ได้รับอนุญาตให้ชี้ออกไปนอกหน่วยความจำที่จัดสรร - วันที่ 22 …

2
สำนวน safe-bool ล้าสมัยใน C ++ 11 หรือไม่
คำตอบของ @R นี้ Martinho Fernandesแสดงให้เห็นว่าสำนวน safe-bool นั้นถูกคัดค้านอย่างชัดเจนใน C ++ 11 เนื่องจากมันสามารถแทนที่ได้โดยง่าย explicit operator bool() const; ตามคำพูดมาตรฐานในคำตอบ§4 [conv] p3: นิพจน์ e สามารถแปลงเป็นประเภทโดยปริยายTหากการประกาศT t=e;นั้นมีรูปแบบที่ดีสำหรับตัวแปรชั่วคราวที่ประดิษฐ์ขึ้นมาบางส่วนt(§8.5) โครงสร้างภาษาบางภาษาต้องการให้นิพจน์ถูกแปลงเป็นค่าบูลีน การแสดงออกeที่ปรากฏในบริบทดังกล่าวกล่าวคือจะต้องแปลงบริบทการboolและเป็นรูปแบบที่ดีและถ้าหากการประกาศbool t(e);เป็นรูปแบบที่ดีสำหรับบางคนคิดค้นตัวแปรเสื้อชั่วคราว (§8.5) ส่วนที่ไฮไลต์จะแสดงให้เห็นอย่างชัดเจนว่า "การส่งแบบชัดเจนโดยนัย" (เรียกว่า "การแปลงตามบริบท" ในมาตรฐาน) เป็น @R Martinho วางไว้ "การสร้างภาษาบางอย่าง" ที่ต้องการให้ "cast ชัดแจ้งชัดเจน" ดูเหมือนจะดังต่อไปนี้: if, while, for( §6.4 [stmt.select] p4) ตัวดำเนินการเชิงตรรกะแบบไบนารี&amp;&amp;และ||( §5.14 [expr.log.and/or] p1สำหรับทั้งคู่) …

4
"การค้นหาอาร์กิวเมนต์ขึ้นอยู่กับ" (aka ADL หรือ "การค้นหานิก") คืออะไร
คำอธิบายที่ดีเกี่ยวกับการค้นหาที่ขึ้นอยู่กับการโต้แย้งคืออะไร? หลายคนก็เรียกมันว่า Koenig Lookup เช่นกัน โดยเฉพาะอย่างยิ่งฉันต้องการทราบ: ทำไมเป็นสิ่งที่ดี ทำไมมันเป็นสิ่งที่ไม่ดี? มันทำงานยังไง?

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