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

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

13
เมื่อใดที่ฉันจะใช้การประกาศล่วงหน้า
ฉันกำลังมองหาคำจำกัดความของเมื่อฉันได้รับอนุญาตให้ทำการประกาศไปข้างหน้าของคลาสในไฟล์ส่วนหัวของคลาสอื่น: ฉันอนุญาตให้ทำสำหรับคลาสพื้นฐานสำหรับคลาสที่จัดเป็นสมาชิกสำหรับคลาสที่ส่งไปยังฟังก์ชันสมาชิกโดยอ้างอิงหรือไม่?

4
ทำไม iostream :: eof ภายในสภาพลูป (เช่น `while (! stream.eof ())`) ถือว่าผิด
ฉันเพิ่งพบความคิดเห็นในคำตอบนี้บอกว่าการใช้iostream::eofในสภาพลูปคือ "เกือบผิดแน่นอน" ฉันมักจะใช้สิ่งที่ชอบwhile(cin>>n)- ซึ่งฉันเดาว่าจะตรวจสอบ EOF โดยปริยาย เหตุใดการตรวจสอบว่ามีการใช้while (!cin.eof())ผิดอย่างชัดเจนหรือไม่ มันแตกต่างจากการใช้scanf("...",...)!=EOFใน C (ซึ่งฉันมักจะใช้ไม่มีปัญหา)?
595 c++  iostream  c++-faq 

12
C ++:“ std :: endl” กับ“ \ n”
หนังสือ C ++ หลายเล่มมีรหัสตัวอย่างเช่นนี้ ... std::cout << "Test line" << std::endl; ... ดังนั้นฉันก็ทำเช่นนั้นเสมอ แต่ฉันเห็นรหัสจำนวนมากจากนักพัฒนาที่ทำงานเช่นนี้แทน: std::cout << "Test line\n"; มีเหตุผลทางเทคนิคหรือไม่ที่จะเลือกอย่างใดอย่างหนึ่งหรือเป็นเรื่องของรูปแบบการเข้ารหัสหรือไม่?

6
กฎการยกเลิก Iterator
กฎการตรวจสอบความถูกต้องของตัววนซ้ำสำหรับคอนเทนเนอร์ C ++ มีอะไรบ้าง โดยเฉพาะอย่างยิ่งในรูปแบบรายการสรุป (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . ถ้าคุณต้องการที่จะวิจารณ์ความคิดของการให้คำถามที่พบบ่อยในรูปแบบนี้แล้วโพสต์บนเมตาที่เริ่มต้นทั้งหมดนี้ . จะเป็นสถานที่ที่จะทำเช่นนั้นได้คำตอบ คำถามนั้นได้รับการตรวจสอบในห้องสนทนา C ++ซึ่งแนวคิด FAQ เริ่มต้นตั้งแต่แรกดังนั้นคำตอบของคุณมีโอกาสมากที่จะได้รับการอ่านโดยผู้ที่คิดแนวคิดนี้)
543 c++  c++11  iterator  c++17  c++-faq 

5
ฉันจะใช้อาร์เรย์ใน C ++ ได้อย่างไร
C ++ สืบทอดมาจาก C ที่พวกเขาใช้งานได้ทุกที่ C ++ ให้ abstractions ที่ใช้ง่ายกว่าและมีข้อผิดพลาดน้อยลง ( std::vector<T>ตั้งแต่ C ++ 98 และstd::array<T, n>ตั้งแต่C ++ 11 ) ดังนั้นความต้องการอาร์เรย์ไม่ได้เกิดขึ้นบ่อยเท่าใน C อย่างไรก็ตามเมื่อคุณอ่าน legacy รหัสหรือโต้ตอบกับไลบรารีที่เขียนใน C คุณควรมีความเข้าใจอย่างถ่องแท้เกี่ยวกับวิธีการทำงานของอาร์เรย์ คำถามที่พบบ่อยนี้แบ่งออกเป็นห้าส่วน: อาร์เรย์ในระดับประเภทและองค์ประกอบการเข้าถึง การสร้างและการเริ่มต้นอาร์เรย์ การมอบหมายและการส่งพารามิเตอร์ อาร์เรย์หลายมิติและอาร์เรย์ของพอยน์เตอร์ ข้อผิดพลาดทั่วไปเมื่อใช้อาร์เรย์ หากคุณรู้สึกว่าสิ่งสำคัญขาดหายไปในคำถามที่พบบ่อยนี้ให้เขียนคำตอบและเชื่อมโยงที่นี่เป็นส่วนเพิ่มเติม ในข้อความต่อไปนี้ "อาร์เรย์" หมายถึง "อาร์เรย์ C" std::arrayไม่ใช่แม่แบบชั้นเรียน มีความรู้พื้นฐานเกี่ยวกับไวยากรณ์ของตัวประกาศ C โปรดทราบว่าการใช้งานด้วยตนเองnewและdeleteแสดงให้เห็นด้านล่างเป็นอันตรายอย่างยิ่งในการเผชิญกับข้อยกเว้น แต่ที่เป็นหัวข้อของคำถามที่พบบ่อยอีก (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . …

5
อะไรคือความแตกต่างระหว่าง“ STL” และ“ ไลบรารีมาตรฐาน C ++”?
มีคนนำบทความนี้ไปสู่ความสนใจของฉันที่อ้างว่า(ฉันถอดความ)คำ STL ถูกนำไปใช้ในทางที่ผิดเพื่ออ้างถึงทั้งห้องสมุดมาตรฐาน C ++ แทนส่วนที่นำมาจาก SGI STL (... ) มันหมายถึง "STL" แม้จะมีคนเพียงไม่กี่คนที่ยังใช้ STL (ซึ่งได้รับการออกแบบที่ SGI) บางส่วนของ C ++ Standard Library นั้นขึ้นอยู่กับส่วนของ STL และเป็นส่วนเหล่านี้ที่หลายคน (รวมถึงผู้แต่งหลายคนและ cplusplus.com ซึ่งมีข้อผิดพลาดอย่างฉาวโฉ่ยังคงเรียกว่า "the STL" อย่างไรก็ตามนี่ไม่ถูกต้อง จริง ๆ แล้วมาตรฐาน C ++ ไม่เคยกล่าวถึง "STL" และมีความแตกต่างของเนื้อหาระหว่างทั้งสอง (... ) "STL" ไม่ค่อยถูกใช้เพื่ออ้างถึงบิตของ stdlib ที่เกิดขึ้นกับ SGI STL ผู้คนคิดว่ามันเป็นห้องสมุดมาตรฐานทั้งหมด มันได้รับการใส่ CV และมันก็ทำให้เข้าใจผิด …

30
อะไรคือความแตกต่างระหว่าง struct และ class ใน C ++?
คำถามนี้ถูกถามอยู่แล้วในบริบทของ C ตอนนี้ฉันต้องการเรียนรู้ความแตกต่างระหว่าง struct และคลาสใน C ++ โปรดอภิปรายเกี่ยวกับความแตกต่างทางเทคนิครวมถึงเหตุผลในการเลือกอย่างใดอย่างหนึ่งในการออกแบบ OO ฉันจะเริ่มต้นด้วยความแตกต่างที่ชัดเจน: หากคุณไม่ระบุpublic:หรือprivate:สมาชิกของ struct เป็นแบบสาธารณะโดยค่าเริ่มต้น สมาชิกของคลาสเป็นส่วนตัวโดยค่าเริ่มต้น ฉันแน่ใจว่ามีความแตกต่างอื่น ๆ ที่จะพบในมุมปิดบังของสเปค C ++
441 c++  oop  class  struct  c++-faq 

6
อะไรคือวัตถุประสงค์หลักของการใช้ std :: forward และปัญหาอะไรที่แก้ได้?
ในการส่งต่อที่สมบูรณ์แบบstd::forwardใช้เพื่อแปลงการอ้างอิง rvalue ที่ระบุชื่อt1และt2การอ้างอิง rvalue ที่ไม่มีชื่อ จุดประสงค์ของการทำเช่นนั้นคืออะไร? สิ่งนั้นจะส่งผลกระทบต่อฟังก์ชั่นที่ถูกเรียกหรือไม่innerถ้าเราปล่อยให้t1& t2เป็นค่า? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }

6
C ++ 11 rvalues ​​และย้ายความสับสนของซีแมนทิกส์ (คำสั่ง return)
ฉันพยายามเข้าใจการอ้างอิงค่าและย้ายซีแมนทิกส์ของ C ++ 11 อะไรคือความแตกต่างระหว่างตัวอย่างเหล่านี้และสิ่งใดที่จะไม่คัดลอกเวกเตอร์ ตัวอย่างแรก std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); ตัวอย่างที่สอง std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); } std::vector<int> &&rval_ref = return_vector(); ตัวอย่างที่สาม std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); } std::vector<int> &&rval_ref = return_vector();


6
กระบวนการรวบรวม / เชื่อมโยงทำงานอย่างไร
กระบวนการรวบรวมและเชื่อมโยงทำงานอย่างไร (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . ถ้าคุณต้องการที่จะวิจารณ์ความคิดของการให้คำถามที่พบบ่อยในรูปแบบนี้แล้วโพสต์บนเมตาที่เริ่มต้นทั้งหมดนี้ . จะเป็นสถานที่ที่จะทำเช่นนั้นได้คำตอบ คำถามนั้นได้รับการตรวจสอบในห้องสนทนา C ++ซึ่งแนวคิด FAQ เริ่มต้นตั้งแต่แรกดังนั้นคำตอบของคุณมีโอกาสมากที่จะได้รับการอ่านโดยผู้ที่คิดแนวคิดนี้)

12
ฉันจะค้นหาเอกสารมาตรฐาน C หรือ C ++ ปัจจุบันได้ที่ไหน
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ คุณเลือกใช้Stack Overflow ในภาษาอังกฤษ : Гдевзятьстандарт C ++? สำหรับคำถามมากมายคำตอบดูเหมือนจะพบได้ใน "มาตรฐาน" อย่างไรก็ตามเราจะพบสิ่งนั้นได้ที่ไหน ออนไลน์ยิ่งกว่า Googling บางครั้งอาจรู้สึกไร้ประโยชน์อีกครั้งโดยเฉพาะอย่างยิ่งสำหรับมาตรฐาน C เนื่องจากพวกเขาจมน้ำตายในการอภิปรายในฟอรัมโปรแกรม ในการเริ่มต้นสิ่งนี้เนื่องจากสิ่งเหล่านี้เป็นสิ่งที่ฉันกำลังค้นหาอยู่ตอนนี้มีแหล่งข้อมูลออนไลน์ที่ดีสำหรับ: C89 C99 C11 C ++ 98 C ++ 03 C ++ 11 C ++ 14 C ++ 17
394 c++  c  standards  c++-faq 

4
ตัวเลือกการคัดลอกและการเพิ่มประสิทธิภาพค่าตอบแทนคืออะไร?
การคัดลอกข้อมูลคืออะไร? การเพิ่มประสิทธิภาพค่าที่ส่งคืนคืออะไร พวกเขาหมายถึงอะไร พวกเขาสามารถเกิดขึ้นได้ในสถานการณ์ใด ข้อ จำกัด คืออะไร หากคุณได้รับการอ้างอิงกับคำถามนี้คุณอาจจะมองหาการแนะนำ สำหรับภาพรวมทางเทคนิคดูมาตรฐานอ้างอิง ดูกรณีทั่วไปที่นี่

11
แก้ไขข้อผิดพลาดของบิลด์เนื่องจากการขึ้นต่อกันระหว่างคลาส
ฉันมักจะพบว่าตัวเองอยู่ในสถานการณ์ที่ฉันกำลังหันหน้าไปทางข้อผิดพลาดการรวบรวม / ลิงเกอร์ในหลายโครงการ c ++ เนื่องจากบางตัดสินใจที่เลวร้ายออกแบบ (ทำโดยคนอื่น :)) ซึ่งนำไปสู่การพึ่งพาวงกลมระหว่างเรียน c ++ ในส่วนหัวของไฟล์ที่แตกต่างกัน(สามารถเกิดขึ้นได้ยัง ในไฟล์เดียวกัน) แต่โชคดี (?) สิ่งนี้ไม่ได้เกิดขึ้นบ่อยครั้งพอที่ฉันจะจดจำวิธีแก้ปัญหานี้ในครั้งต่อไปที่มันเกิดขึ้นอีกครั้ง ดังนั้นเพื่อวัตถุประสงค์ในการเรียกคืนได้ง่ายในอนาคตฉันจะโพสต์ปัญหาตัวแทนและแนวทางแก้ไขพร้อมกับมัน ทางออกที่ดีกว่ายินดีต้อนรับแน่นอน A.h class B; class A { int _val; B *_b; public: A(int val) :_val(val) { } void SetB(B *b) { _b = b; _b->Print(); // COMPILER ERROR: C2027: use of undefined type …

6
ฉันควรใช้ตัวแยกวิเคราะห์ XML ใดใน C ++ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันมีเอกสาร XML ที่ฉันต้องแยกวิเคราะห์และ / หรือฉันต้องการสร้างเอกสาร XML และเขียนลงในข้อความ (ไฟล์หรือหน่วยความจำ) เนื่องจากไลบรารีมาตรฐาน C ++ ไม่มีไลบรารีสำหรับสิ่งนี้ฉันควรใช้อะไร หมายเหตุ:นี่มีวัตถุประสงค์เพื่อให้เป็นคำถามที่ชัดเจน C ++ - คำถามที่พบบ่อยเกี่ยวกับสไตล์นี้ ใช่แล้วมันเป็นรายการที่ซ้ำกันของผู้อื่น ฉันไม่ได้ตอบคำถามเหล่านั้นอย่างเหมาะสมเพราะพวกเขามักจะถามอะไรที่เฉพาะเจาะจงมากกว่านี้เล็กน้อย คำถามนี้เป็นคำถามทั่วไป
344 c++  xml-parsing  c++-faq 

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