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

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

16
การฝึกในการส่งคืนตัวแปรอ้างอิง C ++ นั้นชั่วร้ายหรือไม่?
ฉันคิดว่ามันเป็นเรื่องส่วนตัว ฉันไม่แน่ใจว่าความคิดเห็นจะเป็นเอกฉันท์หรือไม่ (ฉันเห็นตัวอย่างโค้ดจำนวนมากซึ่งส่งคืนการอ้างอิง) จากความคิดเห็นที่มีต่อคำถามนี้ฉันเพิ่งถามเกี่ยวกับการเริ่มต้นการอ้างอิงการอ้างอิงกลับอาจเป็นความชั่วเพราะ [อย่างที่ฉันเข้าใจ] มันทำให้ง่ายต่อการพลาดการลบซึ่งจะนำไปสู่การรั่วไหลของหน่วยความจำ สิ่งนี้ทำให้ฉันเป็นกังวลขณะที่ฉันติดตามตัวอย่าง (เว้นแต่ฉันจะจินตนาการถึงสิ่งต่าง ๆ ) และทำสิ่งนี้ในสถานที่ที่เหมาะสม ... ฉันเข้าใจผิดหรือเปล่า? มันชั่วร้ายเหรอ? ถ้าเป็นเช่นนั้นความชั่วร้ายเพียงใด? ฉันรู้สึกว่าเนื่องจากพอยน์เตอร์และการอ้างอิงแบบผสมของฉันรวมกับความจริงที่ว่าฉันใหม่กับ C ++ และความสับสนอย่างสมบูรณ์เกี่ยวกับสิ่งที่จะใช้เมื่อแอปพลิเคชันของฉันต้องเป็นนรกหน่วยความจำรั่วไหล ... นอกจากนี้ฉันเข้าใจว่าการใช้ตัวชี้สมาร์ท / แชร์นั้นเป็นที่ยอมรับโดยทั่วไปว่าเป็นวิธีที่ดีที่สุดในการหลีกเลี่ยงการรั่วไหลของหน่วยความจำ
341 c++  reference  c++-faq 

9
การเชื่อมโยงภายนอกและการเชื่อมโยงภายในคืออะไร
ฉันต้องการเข้าใจการเชื่อมโยงภายนอกและการเชื่อมโยงภายในและความแตกต่าง ฉันยังต้องการทราบความหมายของ constการเชื่อมโยงตัวแปรภายในโดยค่าเริ่มต้นเว้นแต่จะประกาศเป็นexternอย่างอื่น
337 c++  c++-faq 

2
วิธีการใช้อัลกอริทึมการเรียงลำดับแบบคลาสสิกใน C ++ ที่ทันสมัย?
std::sortอัลกอริทึม (และญาติของตนstd::partial_sortและstd::nth_element) จาก ++ ห้องสมุด C มาตรฐานในการใช้งานมากที่สุดควบซับซ้อนและไฮบริดของขั้นตอนวิธีการเรียงลำดับประถมศึกษามากขึ้นเช่นการเลือกเรียงลำดับการจัดเรียงแทรกรวดเร็วเรียงลำดับผสานเรียงลำดับหรือการจัดเรียงกอง มีคำถามมากมายที่นี่และในเว็บไซต์น้องสาวเช่นhttps://codereview.stackexchange.com/ที่เกี่ยวข้องกับข้อบกพร่องความซับซ้อนและด้านอื่น ๆ ของการใช้งานของอัลกอริทึมการเรียงลำดับแบบคลาสสิกเหล่านี้ การนำไปใช้งานที่นำเสนอส่วนใหญ่ประกอบด้วยลูปดิบใช้การจัดการดัชนีและประเภทที่เป็นรูปธรรมและโดยทั่วไปจะไม่วิเคราะห์ในแง่ของความถูกต้องและมีประสิทธิภาพ คำถาม : อัลกอริทึมการเรียงลำดับแบบคลาสสิกที่กล่าวถึงข้างต้นสามารถนำไปใช้งานได้อย่างไรโดยใช้ C ++ สมัยใหม่ ไม่มีลูปแบบดิบแต่รวมการสร้างแบบอัลกอริทึมของ Standard Library เข้าด้วยกัน<algorithm> อินเทอร์เฟซตัววนซ้ำและการใช้เทมเพลตแทนการจัดการดัชนีและชนิดที่เป็นรูปธรรม สไตล์ C ++ 14รวมถึงไลบรารี่มาตรฐานเต็มรูปแบบรวมถึงตัวลดสัญญาณเสียงวากยสัมพันธ์เช่นautoนามแฝงเทมเพลตตัวเปรียบเทียบโปร่งใสและแลมบ์ดา polymorphic หมายเหตุ : สำหรับการอ้างอิงเพิ่มเติมเกี่ยวกับการใช้งานของอัลกอริทึมการเรียงลำดับดูWikipedia , รหัส Rosettaหรือhttp://www.sorting-algorithms.com/ ตามอนุสัญญาของฌอนพาเรนต์ (สไลด์ 39) ห่วงดิบเป็นวงที่forยาวกว่าองค์ประกอบของสองฟังก์ชันกับตัวดำเนินการ ดังนั้นf(g(x));หรือf(x); g(x);หรือf(x) + g(x);ไม่ได้ลูปดิบและไม่เป็นลูปในselection_sortและinsertion_sortด้านล่าง ฉันทำตามคำศัพท์ของ Scott Meyers เพื่อแสดง C ++ 1y ปัจจุบันเป็น C …

13
เทมเพลตฟังก์ชันสมาชิกระดับสามารถเป็นเสมือนได้หรือไม่?
ฉันได้ยินมาว่าแม่แบบฟังก์ชันคลาสสมาชิก C ++ ไม่สามารถเป็นเสมือนได้ มันเป็นเรื่องจริงเหรอ? หากพวกเขาสามารถเป็นเสมือนจริงตัวอย่างของสถานการณ์ที่จะใช้ฟังก์ชั่นดังกล่าวคืออะไร?

20
เหตุใดฉันจึงควรเปิดใช้งานคำเตือนคอมไพเลอร์เสมอ
ฉันมักจะได้ยินว่าเมื่อรวบรวมโปรแกรม C และ C ++ ฉันควร "เปิดใช้งานคำเตือนคอมไพเลอร์" เสมอ ทำไมถึงจำเป็น ฉันจะทำอย่างไร บางครั้งฉันก็ได้ยินว่าฉันควร "ถือว่าคำเตือนเป็นข้อผิดพลาด" ฉันควร? ฉันจะทำอย่างไร

16
C ++ รองรับการบล็อก 'ที่สุด' หรือไม่? (และนี่คือ 'RAII' ที่ฉันคอยฟัง?)
C ++ รองรับการบล็อก ' ที่สุด ' หรือไม่? อะไรคือ สำนวน RAII ? อะไรคือความแตกต่างระหว่างคำสั่ง RAII ของ C ++ กับการใช้คำสั่ง 'C' ?
272 c++  exception  raii  finally  c++-faq 


4
เหตุใดฉันจึงไม่ #include <bits / stdc ++. h>
ฉันโพสต์คำถามด้วยรหัสของฉันซึ่ง#includeคำสั่งเพียงอย่างเดียวคือ: #include &lt;bits/stdc++.h&gt; ครูของฉันบอกให้ฉันทำสิ่งนี้ แต่ในส่วนความเห็นฉันได้รับแจ้งว่าฉันไม่ควรทำ ทำไม?

3
คำสั่งเริ่มต้นรายการประเมินผลตัวสร้าง
ฉันมีตัวสร้างที่ใช้อาร์กิวเมนต์บางอย่าง ฉันสันนิษฐานว่าพวกเขาถูกสร้างขึ้นตามลำดับที่ระบุไว้ แต่ในกรณีหนึ่งดูเหมือนว่าพวกเขากำลังสร้างในสิ่งที่ตรงกันข้ามทำให้เกิดการยกเลิก เมื่อฉันย้อนกลับข้อโต้แย้งโปรแกรมหยุดยกเลิก นี่คือตัวอย่างของไวยากรณ์ที่ฉันใช้ สิ่งนี้คือ a_ ต้องเริ่มต้นก่อน b_ ในกรณีนี้ คุณสามารถรับประกันลำดับของการก่อสร้างได้หรือไม่? เช่น class A { public: A(OtherClass o, string x, int y) : a_(o), b_(a_, x, y) { } OtherClass a_; AnotherClass b_; };
252 c++  gcc  c++-faq 

7
วิธีการส่งผ่านวัตถุไปยังฟังก์ชั่นใน C ++?
ฉันใหม่สำหรับการเขียนโปรแกรม C ++ แต่ฉันมีประสบการณ์ใน Java ฉันต้องการคำแนะนำเกี่ยวกับวิธีการส่งวัตถุไปยังฟังก์ชั่นใน C ++ ฉันต้องผ่านพอยน์เตอร์การอ้างอิงหรือค่าที่ไม่ใช่ตัวชี้และไม่อ้างอิงหรือไม่ ฉันจำได้ใน Java ไม่มีปัญหาดังกล่าวเนื่องจากเราส่งเฉพาะตัวแปรที่เก็บการอ้างอิงถึงวัตถุ มันจะดีถ้าคุณสามารถอธิบายได้ว่าจะใช้ตัวเลือกเหล่านั้นด้วยที่ไหน

4
เมื่อใดที่ฉันจะใช้จุดลูกศรหรือเครื่องหมายโคลอนคู่เพื่ออ้างถึงสมาชิกของคลาสใน C ++
มาจากภาษา C ที่ได้มาจากอื่น ๆ (เช่น Java หรือ C #) กับ C ++ มันเป็นครั้งแรกที่ทำให้เกิดความสับสนมากว่า C ++ มีสามวิธีในการอ้างถึงสมาชิกของชั้นเรียน: a::b, และa.b a-&gt;bฉันจะใช้โอเปอเรเตอร์ตัวใด (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . ถ้าคุณต้องการที่จะวิจารณ์ความคิดของการให้คำถามที่พบบ่อยในรูปแบบนี้แล้วโพสต์บนเมตาที่เริ่มต้นทั้งหมดนี้ . จะเป็นสถานที่ที่จะทำเช่นนั้นได้คำตอบ คำถามนั้นจะได้รับการตรวจสอบในห้องสนทนา C ++ซึ่งแนวคิด FAQ เริ่มต้นตั้งแต่แรกดังนั้นคำตอบของคุณมีโอกาสมากที่จะได้รับการอ่านโดยผู้ที่คิดแนวคิดนั้น)
243 c++  c++-faq 

14
ตัวชี้ไปยังคลาสข้อมูลสมาชิก“ :: *”
ฉันเจอข้อมูลโค้ดแปลก ๆ ที่รวบรวมได้ดี: class Car { public: int speed; }; int main() { int Car::*pSpeed = &amp;Car::speed; return 0; } เหตุใด C ++ จึงมีตัวชี้นี้ไปยังสมาชิกข้อมูลที่ไม่คงที่ของคลาส? สิ่งที่การใช้งานของตัวชี้นี้แปลกในรหัสที่แท้จริงคืออะไร?
243 c++  class  pointers  c++-faq 

1
วัตถุประสงค์ของการ std :: launder คืออะไร?
P0137แนะนำเทมเพลตฟังก์ชั่น std::launderและทำการเปลี่ยนแปลงมากมายในมาตรฐานในส่วนที่เกี่ยวข้องกับสหภาพอายุการใช้งานและพอยน์เตอร์ ปัญหานี้แก้ไขได้อย่างไร การเปลี่ยนแปลงภาษาที่ฉันต้องระวังคืออะไร และสิ่งที่เราlaunderไอเอ็นจี?

19
ฉันจะลบการทำสำเนารหัสระหว่างฟังก์ชั่นสมาชิกแบบ const และ non-const ที่คล้ายกันได้อย่างไร
สมมติว่าฉันมีสิ่งต่อไปนี้class Xที่ฉันต้องการคืนการเข้าถึงสมาชิกภายใน: class Z { // details }; class X { std::vector&lt;Z&gt; vecZ; public: Z&amp; Z(size_t index) { // massive amounts of code for validating index Z&amp; ret = vecZ[index]; // even more code for determining that the Z instance // at index is *exactly* the right sort of Z …

3
“ การอ้างอิงค่าสำหรับ * นี้” คืออะไร?
มาข้ามข้อเสนอที่เรียกว่า "การอ้างอิง rvalue สำหรับ * นี้" ในเสียงดังกราวของC ++ หน้า ฉันได้อ่านเกี่ยวกับการอ้างอิงค่าและเข้าใจพวกเขามาบ้าง แต่ฉันไม่คิดว่าฉันจะรู้เรื่องนี้ ฉันไม่สามารถหาแหล่งข้อมูลมากมายบนเว็บโดยใช้คำศัพท์ มีลิงก์ไปยังเอกสารข้อเสนอบนหน้า: N2439 (ขยายความหมายของการย้ายไปเป็น * สิ่งนี้) แต่ฉันก็ไม่ได้รับตัวอย่างมากมายจากที่นั่น คุณสมบัตินี้เกี่ยวกับอะไร?

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