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

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

21
คุณใช้ NULL หรือ 0 (ศูนย์) สำหรับตัวชี้ใน C ++ หรือไม่?
ในวันแรกของ C ++ เมื่อมันถูกปิดด้านบนของ C, (void*)0คุณไม่สามารถใช้เป็นโมฆะขณะที่มันถูกกำหนดให้เป็น คุณไม่สามารถกำหนด NULL ให้กับตัวชี้ใด ๆ นอกจากvoid*ที่ทำให้มันไร้ประโยชน์ ย้อนกลับไปในสมัยนั้นเป็นที่ยอมรับว่าคุณใช้0(ศูนย์) สำหรับพอยน์เตอร์พอยน์เตอร์ จนถึงวันนี้ผมยังคงใช้เป็นศูนย์เป็นตัวชี้โมฆะ แต่คนรอบ ๆ NULLตัวผมยืนยันในการใช้ ฉันเองไม่เห็นประโยชน์ใด ๆ ในการตั้งชื่อ ( NULL) ให้กับค่าที่มีอยู่ - และเนื่องจากฉันต้องการทดสอบพอยน์เตอร์เป็นค่าความจริง: if (p && !q) do_something(); จากนั้นใช้ศูนย์ทำให้รู้สึกมากขึ้น (เช่นถ้าคุณใช้NULLคุณไม่สามารถใช้อย่างมีเหตุผลp && !q- คุณต้องเปรียบเทียบอย่างชัดเจนNULLเว้นแต่คุณจะถือว่าNULLเป็นศูนย์ในกรณีนี้ทำไมใช้NULL) มีเหตุผลวัตถุประสงค์ใดที่จะชอบศูนย์มากกว่า NULL (หรือกลับกัน) หรือทั้งหมดเป็นเพียงการตั้งค่าส่วนตัว? แก้ไข: ฉันควรเพิ่ม (และตั้งใจจะพูด แต่เดิม) ว่าด้วย RAII และข้อยกเว้นฉันไม่ค่อยใช้ตัวชี้ศูนย์ / NULL แต่บางครั้งคุณก็ยังต้องการ
194 c++  null 

7
Deque ใน STL คืออะไร
Наэтотвопросестьответына Stack Overflow нарусском : Особенностьразмещениеэлементов in std :: ฉันมองไปที่คอนเทนเนอร์ STL และพยายามคิดว่ามันคืออะไร (เช่นโครงสร้างข้อมูลที่ใช้) และdequeหยุดฉัน: ฉันคิดตอนแรกว่ามันเป็นรายการเชื่อมโยงสองชั้นซึ่งจะช่วยให้การแทรกและการลบจากปลายทั้งสองใน เวลาคงที่ แต่ฉันกังวลใจกับคำสัญญาที่ทำโดยผู้ดำเนินการ [] ที่ต้องทำในเวลาที่แน่นอน ในรายการที่เชื่อมโยงการเข้าถึงโดยพลการควรเป็น O (n) ใช่ไหม และถ้าเป็นอาร์เรย์แบบไดนามิกมันจะเพิ่มองค์ประกอบในเวลาคงที่ได้อย่างไร มันควรจะกล่าวว่าการจัดสรรอาจจะเกิดขึ้นและที่ O (1) เป็นค่าใช้จ่ายตัดจำหน่ายเหมือนเวกเตอร์ ดังนั้นฉันจึงสงสัยว่าโครงสร้างแบบนี้อนุญาตให้เข้าถึงโดยพลการในเวลาที่กำหนดได้อย่างไรและในเวลาเดียวกันก็ไม่จำเป็นต้องย้ายไปอยู่ที่ใหม่ที่ใหญ่กว่า
194 c++  stl  deque 


6
RAII และตัวชี้สมาร์ทใน C ++
ในทางปฏิบัติกับ C ++ RAIIคืออะไรพอยน์เตอร์อัจฉริยะคืออะไรสิ่งเหล่านี้นำไปใช้ในโปรแกรมได้อย่างไรและประโยชน์ของการใช้ RAII กับพอยน์เตอร์อัจฉริยะคืออะไร
193 c++  smart-pointers  raii 

27
การออกแบบเครื่องจักร C [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้นี้ ปิดให้บริการใน4 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ฉันกำลังสร้างโครงการขนาดเล็กในแบบผสม C และ C ++ ฉันกำลังสร้างเครื่องจักรเล็ก ๆ แห่งหนึ่งที่เป็นหัวใจของด้ายคนงานของฉัน ฉันสงสัยว่าคุณ gurus บน SO จะแบ่งปันเทคนิคการออกแบบเครื่องจักรของรัฐหรือไม่ หมายเหตุ:ฉันเป็นหลักหลังจากพยายามและทดสอบเทคนิคการใช้งาน อัปเดต:อิงจากอินพุตที่ยอดเยี่ยมทั้งหมดที่รวบรวมบน SO ฉันได้ตัดสินสถาปัตยกรรมนี้:

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


2
ตัวแปร constexpr แบบคงที่ภายในฟังก์ชั่นเหมาะสมหรือไม่?
ถ้าฉันมีตัวแปรภายในฟังก์ชั่น (พูดเป็นอาร์เรย์ขนาดใหญ่) มันทำให้รู้สึกถึงการประกาศมันทั้งสองstaticและconstexpr? constexprรับประกันได้ว่าอาร์เรย์จะถูกสร้างขึ้นในเวลารวบรวมดังนั้นจะstaticไร้ประโยชน์หรือไม่? void f() { static constexpr int x [] = { // a few thousand elements }; // do something with the array } เป็นstaticสิ่งที่ทำจริงมีในแง่ของการสร้างรหัสหรือความหมาย?
193 c++  static  c++11  constexpr 

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

2
ฟีเจอร์ Boost ใดที่ทับซ้อนกับ C ++ 11
ฉันใส่ทักษะ C ++ ของฉันบนชั้นวางเมื่อหลายปีก่อนและดูเหมือนตอนนี้เมื่อฉันต้องการมันอีกครั้งภูมิทัศน์ก็เปลี่ยนไป ตอนนี้เรามี C ++ 11 และความเข้าใจของฉันคือมันทับซ้อนกับฟีเจอร์ Boost มากมาย มีข้อสรุปบางอย่างที่ทับซ้อนกันอยู่ซึ่ง Boost ห้องสมุดใดที่จะกลายเป็นมรดกแนะนำว่าคุณสมบัติ C ++ 11 ที่จะใช้แทนการเพิ่มและที่ไม่ดีกว่า?
192 c++  boost  c++11 

7
ทำไม std :: list :: reverse มีความซับซ้อน O (n)
เหตุใดฟังก์ชันย้อนกลับสำหรับstd::listคลาสในไลบรารีมาตรฐาน C ++ จึงมี Linear runtime ฉันคิดว่าสำหรับรายการที่ลิงก์สองเท่าฟังก์ชันย้อนกลับควรเป็น O (1) การย้อนกลับรายการที่เชื่อมโยงเป็นทวีคูณควรเกี่ยวข้องกับการสลับหัวและตัวชี้ท้าย
192 c++  c++11  stl  linked-list 

19
ฉันสามารถใช้ตัวอักษรไบนารีใน C หรือ C ++ ได้ไหม?
ฉันต้องทำงานกับเลขฐานสอง ฉันพยายามเขียน: const x = 00010000; แต่มันไม่ทำงาน ฉันรู้ว่าฉันสามารถใช้เลขฐานสิบหกที่มีค่าเหมือน00010000กัน แต่ฉันต้องการที่จะรู้ว่ามีชนิดใน C ++ สำหรับเลขฐานสองหรือไม่และถ้าไม่มีจะมีวิธีแก้ไขปัญหาของฉันอีกหรือไม่
191 c++  c  binary 

12
การค้นหาเส้นทางของไฟล์เรียกทำงานปัจจุบันโดยไม่มี / proc / self / exe
สำหรับฉันแล้วดูเหมือนว่า Linux สามารถใช้งานได้ง่ายกับ / proc / self / exe แต่ฉันต้องการทราบว่ามีวิธีที่สะดวกในการค้นหาไดเรกทอรีของแอปพลิเคชันปัจจุบันใน C / C ++ พร้อมอินเทอร์เฟซข้ามแพลตฟอร์มหรือไม่ ฉันเคยเห็นบางโครงการล้อเล่นกับ argv [0] แต่ดูเหมือนจะไม่น่าเชื่อถือทั้งหมด หากคุณเคยให้การสนับสนุนพูดว่า Mac OS X ซึ่งไม่มี / proc / คุณจะทำอะไร ใช้ #ifdefs เพื่อแยกรหัสเฉพาะแพลตฟอร์ม (ตัวอย่างเช่น NSBundle) หรือไม่ หรือพยายามที่จะอนุมานเส้นทางของปฏิบัติการจาก argv [0], $ PATH และอะไรก็ตามที่เสี่ยงต่อการหาข้อบกพร่องในกรณีขอบ
190 c++  c  linux  macos  executable 

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

13
ท่านจะไม่ได้รับมรดกจาก std :: vector
ตกลงนี้มันยากที่จะสารภาพ std::vectorแต่ฉันจะมีสิ่งล่อใจที่แข็งแกร่งในขณะนี้จะได้รับมรดกจาก ฉันต้องการอัลกอริทึมแบบกำหนดเองประมาณ 10 แบบสำหรับเวกเตอร์และฉันต้องการให้พวกเขาเป็นสมาชิกของเวกเตอร์โดยตรง แต่โดยธรรมชาติฉันต้องการมีส่วนstd::vectorต่อประสานที่เหลือ ความคิดแรกของฉันในฐานะพลเมืองที่ปฏิบัติตามกฎหมายคือการมีstd::vectorสมาชิกในMyVectorชั้นเรียน แต่จากนั้นฉันจะต้องทบทวนส่วนติดต่อทั้งหมดของ std :: vector อีกครั้งด้วยตนเอง พิมพ์มากเกินไป ต่อไปฉันนึกถึงมรดกส่วนตัวดังนั้นแทนที่จะใช้วิธีประณามฉันจะเขียนบทความหลายusing std::vector::memberเรื่องในส่วนสาธารณะ อันนี้น่าเบื่อจริง ๆ แล้ว และฉันอยู่ที่นี่ฉันคิดว่าฉันสามารถสืบทอดต่อสาธารณชนได้ง่ายstd::vectorๆ แต่ให้คำเตือนในเอกสารที่ว่าคลาสนี้ไม่ควรใช้ polymorphically ฉันคิดว่านักพัฒนาส่วนใหญ่มีความสามารถพอที่จะเข้าใจได้ว่าสิ่งนี้ไม่ควรใช้ polymorphically อยู่ดี การตัดสินใจของฉันเป็นการไม่ยุติธรรมอย่างแน่นอนหรือไม่? ถ้าเป็นเช่นนั้นทำไม คุณสามารถให้ทางเลือกซึ่งจะมีสมาชิกเพิ่มเติมจริง ๆ แล้วสมาชิก แต่จะไม่เกี่ยวข้องกับการพิมพ์หน้าจอทั้งหมดของเวกเตอร์อีกครั้งหรือไม่ ฉันสงสัยมัน แต่ถ้าคุณทำได้ฉันก็จะมีความสุข นอกจากนี้นอกเหนือจากความจริงที่ว่าคนงี่เง่าบางคนสามารถเขียนสิ่งที่ชอบ std::vector<int>* p = new MyVector มีอันตรายอื่นที่เหมือนจริงในการใช้ MyVector หรือไม่? โดยบอกว่าสมจริงฉันจะละทิ้งสิ่งต่าง ๆ อย่างเช่นจินตนาการถึงฟังก์ชั่นที่ใช้ตัวชี้ไปยังเวกเตอร์ ... ฉันได้กล่าวถึงกรณีของฉัน ฉันได้กระทำบาป. ตอนนี้ก็ขึ้นอยู่กับคุณที่จะให้อภัยฉันหรือไม่ :)
189 c++  oop  inheritance  stl  vector 

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