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

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

21
มีเหตุผลทางเทคนิคหรือไม่ที่จะใช้> (<) แทนที่จะเป็น! = เมื่อเพิ่มขึ้นทีละ 1 ในลูป 'for'?
ฉันแทบจะไม่เห็นforลูปแบบนี้: for (int i = 0; 5 != i; ++i) {} มีเหตุผลทางเทคนิคที่จะใช้&gt;หรือ&lt;แทนที่จะ!=เพิ่มทีละ 1 เมื่อforวนซ้ำหรือไม่? หรือนี่เป็นแบบแผนมากกว่ากัน?
198 c++  c  for-loop 

8
return statement เทียบกับ exit () ใน main ()
ฉันควรใช้exit()หรือเพียงแค่returnงบในmain()? โดยส่วนตัวแล้วฉันชอบreturnคำแถลงเพราะฉันรู้สึกว่ามันเหมือนกับการอ่านฟังก์ชั่นอื่น ๆ และการควบคุมการไหลเมื่อฉันอ่านรหัสนั้นราบรื่น (ในความคิดของฉัน) และแม้ว่าฉันต้องการที่จะ refactor main()ฟังก์ชั่นที่มีดูเหมือนจะเป็นทางเลือกที่ดีกว่าreturnexit() มีexit()อะไรพิเศษที่returnทำไม่ได้เหรอ?
197 c++  c  coding-style  return  exit 

19
มีวิธีจำลองแนวคิด 'เพื่อน' ของ C ++ ใน Java หรือไม่?
ฉันต้องการที่จะสามารถเขียนคลาส Java ในแพ็คเกจหนึ่งซึ่งสามารถเข้าถึงวิธีการที่ไม่ใช่แบบสาธารณะของคลาสในแพ็กเกจอื่นโดยไม่ต้องทำให้คลาสย่อยของคลาสอื่น เป็นไปได้ไหม
197 java  c++  friend  accessor 

7
เหตุใดจึงต้องใช้ฟังก์ชันเริ่มต้นและสิ้นสุดที่ไม่ใช่สมาชิกใน C ++ 11
คอนเทนเนอร์มาตรฐานทุกตัวมี a beginและendเมธอดสำหรับส่งคืนตัววนซ้ำสำหรับคอนเทนเนอร์นั้น อย่างไรก็ตาม C ++ 11 ได้เปิดตัวฟังก์ชั่นฟรีที่เรียกว่าstd::beginและฟังก์ชั่นการstd::endโทรbeginและendสมาชิก ดังนั้นแทนที่จะเขียน auto i = v.begin(); auto e = v.end(); คุณต้องการเขียน auto i = std::begin(v); auto e = std::end(v); ในคำพูดของเขาการเขียน Modern C ++ Herb Sutter บอกว่าคุณควรใช้ฟังก์ชั่นฟรีทันทีเมื่อคุณต้องการเริ่มต้นหรือสิ้นสุดตัววนซ้ำสำหรับคอนเทนเนอร์ อย่างไรก็ตามเขาไม่ได้ลงรายละเอียดว่าทำไมคุณถึงต้องการ การดูรหัสจะช่วยให้คุณประหยัดอักขระทั้งหมดหนึ่งตัว ดังนั้นเท่าที่ภาชนะมาตรฐานไปฟังก์ชั่นฟรีดูเหมือนจะไร้ประโยชน์อย่างสมบูรณ์ Herb Sutter ระบุว่ามีประโยชน์สำหรับภาชนะที่ไม่ได้มาตรฐาน แต่อีกครั้งเขาไม่ได้ลงรายละเอียด ดังนั้นคำถามคือสิ่งที่รุ่นฟังก์ชั่นอิสระของstd::beginและstd::endทำนอกเหนือจากการเรียกรุ่นฟังก์ชั่นสมาชิกที่สอดคล้องกันและทำไมคุณต้องการที่จะใช้พวกเขา?

4
มาตรฐาน C ++ มีประสิทธิภาพต่ำสำหรับ iostreams หรือฉันแค่จัดการกับการนำไปใช้ที่ไม่ดี?
ทุกครั้งที่ฉันพูดถึงประสิทธิภาพที่ช้าของ C ++ ไลบรารีมาตรฐาน iostreams ฉันจะได้พบกับคลื่นแห่งความไม่เชื่อ แต่ฉันมีผลลัพธ์ของ profiler ที่แสดงเวลาจำนวนมากที่ใช้ในโค้ดไลบรารี iostream (การปรับให้เหมาะสมเต็มที่ของคอมไพเลอร์), และการสลับจาก iostreams ไปเป็น I / O API เฉพาะระบบปฏิบัติการและการจัดการบัฟเฟอร์แบบกำหนดเอง สิ่งที่เป็นงานพิเศษคือห้องสมุดมาตรฐาน C ++ ทำมันเป็นสิ่งจำเป็นโดยมาตรฐานและเป็นประโยชน์ในการปฏิบัติ? หรือคอมไพเลอร์บางตัวมีการใช้งาน iostreams ที่สามารถแข่งขันกับการจัดการบัฟเฟอร์ด้วยตนเองได้หรือไม่? มาตรฐาน เพื่อให้เรื่องต่าง ๆ มีความเคลื่อนไหวฉันได้เขียนโปรแกรมสั้น ๆ สองข้อเพื่อออกกำลังกายการบัฟเฟอร์ภายใน iostreams: วางข้อมูลไบนารีลงในostringstream http://ideone.com/2PPYw ใส่ข้อมูลไบนารีลงในchar[]บัฟเฟอร์http://ideone.com/Ni5ct วางข้อมูลไบนารีลงในhttp://ideone.com/Mj2Fi ที่vector&lt;char&gt;ใช้back_inserter ใหม่ : ตัวvector&lt;char&gt;วนซ้ำอย่างง่ายhttp://ideone.com/9iitv ใหม่ : ใส่ข้อมูลไบนารีโดยตรงในstringbuf http://ideone.com/qc9QA ใหม่ : ตัวvector&lt;char&gt;วนซ้ำแบบง่ายพร้อมการตรวจสอบขอบเขตhttp://ideone.com/YyrKy โปรดทราบว่าostringstreamและstringbufรุ่นต่างๆจะทำงานซ้ำน้อยลงเพราะมันช้ากว่ามาก เมื่อวันที่ …

7
การส่งต่อการประกาศประเภท / คลาสที่ซ้อนกันใน C ++
ฉันเพิ่งติดอยู่ในสถานการณ์เช่นนี้: class A { public: typedef struct/class {...} B; ... C::D *someField; } class C { public: typedef struct/class {...} D; ... A::B *someField; } โดยปกติคุณสามารถประกาศชื่อคลาสได้: class A; แต่คุณไม่สามารถส่งต่อชนิดที่ซ้อนกันได้สาเหตุต่อไปนี้เป็นข้อผิดพลาดในการรวบรวม class C::D; ความคิดใด ๆ

3
การอ้างอิงที่ไม่ได้กำหนดถึง 'std :: cout'
นี่เป็นตัวอย่าง: #include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; "Hola, moondo.\n"; } มันพ่นข้อผิดพลาด: gcc -c main.cpp gcc -o edit main.o main.o: In function `main': main.cpp:(.text+0xa): undefined reference to `std::cout' main.cpp:(.text+0xf): undefined reference to `std::basic_ostream&lt;char,std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt;&gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)' main.o: In function `__static_initialization_and_destruction_0(int,int)': main.cpp:(.text+0x3d): undefined reference …
197 c++  c++11  gcc  cout 

30
ฉันจะแปลงระหว่างค่า big-endian และ little-endian ใน C ++ ได้อย่างไร
ฉันจะแปลงระหว่างค่า big-endian และ little-endian ใน C ++ ได้อย่างไร แก้ไข: เพื่อความชัดเจนฉันต้องแปลข้อมูลไบนารี (ค่าทศนิยมที่มีความแม่นยำสองเท่าและจำนวนเต็ม 32- บิตและ 64- บิต) จากสถาปัตยกรรม CPU หนึ่งไปยังอีกสถาปัตยกรรมหนึ่ง สิ่งนี้ไม่เกี่ยวข้องกับเครือข่ายดังนั้น ntoh () และฟังก์ชั่นที่คล้ายกันจะไม่ทำงานที่นี่ แก้ไข # 2: คำตอบที่ฉันยอมรับนำไปใช้โดยตรงกับคอมไพเลอร์ที่ฉันกำหนดเป้าหมาย (ซึ่งเป็นเหตุผลที่ฉันเลือกมัน) อย่างไรก็ตามมีคำตอบที่ดีมากพกพาได้มากกว่าที่นี่
196 c++  endianness 

9
คำหลักคงที่และการใช้งานที่หลากหลายใน C ++
คำหลักstaticคือคำที่มีความหมายหลายอย่างใน C ++ ที่ฉันพบว่าสับสนมากและฉันไม่สามารถงอใจได้ว่ามันควรจะทำงานอย่างไร จากสิ่งที่ฉันเข้าใจมีstaticระยะเวลาการจัดเก็บข้อมูลซึ่งหมายความว่ามันมีอายุการใช้งานของโปรแกรมในกรณีของโลก แต่เมื่อคุณพูดถึงท้องถิ่นก็หมายความว่ามันเริ่มต้นเป็นศูนย์โดยค่าเริ่มต้น C ++ Standard กล่าวสิ่งนี้สำหรับสมาชิกคลาสข้อมูลที่มีคีย์เวิร์ดstatic: 3.7.1 ระยะเวลาการจัดเก็บแบบคงที่ [basic.stc.static] 3 คำสำคัญคงที่สามารถใช้ในการประกาศตัวแปรท้องถิ่นที่มีระยะเวลาการจัดเก็บแบบคงที่ 4 สแตติกคำสำคัญที่ใช้กับสมาชิกคลาสข้อมูลในคำจำกัดความคลาสให้ระยะเวลาการเก็บข้อมูลสมาชิกแบบคงที่ มันหมายความว่าอะไรกับตัวแปรท้องถิ่น ? นั่นคือฟังก์ชั่นตัวแปรท้องถิ่น? เพราะมันยังมีที่เมื่อคุณประกาศฟังก์ชั่นในท้องถิ่นstaticว่ามันจะเริ่มต้นเพียงครั้งเดียวครั้งแรกที่มันเข้าสู่ฟังก์ชั่นนี้ นอกจากนี้ยังพูดถึงระยะเวลาในการจัดเก็บเฉพาะสมาชิกชั้นเรียนว่าเป็นเรื่องที่ไม่เฉพาะเจาะจงซึ่งเป็นคุณสมบัติที่staticไม่ หรือว่าเป็นระยะเวลาการเก็บรักษา? ตอนนี้สิ่งที่เกี่ยวกับกรณีที่มีstaticและขอบเขตไฟล์? ตัวแปรส่วนกลางทั้งหมดถูกพิจารณาว่ามีระยะเวลาการเก็บแบบสแตติกตามค่าเริ่มต้นหรือไม่ ดูเหมือนว่าต่อไปนี้ (จากส่วน 3.7.1) ดังต่อไปนี้: 1 ตัวแปรทั้งหมดที่ไม่มีระยะเวลาการจัดเก็บแบบไดนามิกไม่มีระยะเวลาการจัดเก็บด้ายและไม่ท้องถิ่นมีระยะเวลาการจัดเก็บแบบคงที่ ที่เก็บข้อมูลสำหรับเอนทิตีเหล่านี้จะคงอยู่ตลอดระยะเวลาของโปรแกรม (3.6.2, 3.6.3) วิธีการที่ไม่staticเกี่ยวข้องกับการเชื่อมโยงของตัวแปร? staticคำหลักทั้งหมดนี้ทำให้เกิดความสับสนอย่างจริงจังใครบางคนสามารถอธิบายการใช้ภาษาอังกฤษที่แตกต่างกันและบอกฉันเมื่อใดที่จะเริ่มstaticสมาชิกคลาส?
196 c++  static 

8
ลบคำเตือนที่ปลอดภัย (_CRT_SECURE_NO_WARNINGS) จากโครงการโดยค่าเริ่มต้นใน Visual Studio
มีวิธีการตั้งค่าเริ่มต้นสำหรับทุกโครงการที่ลบคำเตือนความปลอดภัย precompiler ที่เกิดขึ้นเมื่อใช้ฟังก์ชั่นเช่น scanf () ฉันพบว่าคุณสามารถทำได้โดยเพิ่มบรรทัดในตัวเลือกโครงการหรือ#define _CRT_SECURE_NO_WARNINGSในตอนต้นของรหัส ฉันพบว่าตัวเองสร้างโครงการใหม่ ๆ หลายครั้งเพื่อแก้ไขการแข่งขันการเขียนโปรแกรมและมันน่ารำคาญจริงๆ (และใช้เวลาอันมีค่า) ในการเพิ่ม: #ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif ในการเริ่มต้นของรหัสหรือการตั้งค่าในตัวเลือก precompiler ทุกครั้งที่ฉันเริ่มโครงการใหม่

17
เป็นการดีที่จะวางคำจำกัดความ C ++ ลงในไฟล์ส่วนหัวหรือไม่?
สไตล์ส่วนตัวของฉันกับ C ++ มีเสมอที่จะนำการประกาศชั้นในรวมไฟล์และคำนิยามในแฟ้ม .cpp เป็นอย่างมากเช่นที่ระบุไว้ในคำตอบของโลกิจะc ++ หัวไฟล์แยกรหัส ส่วนหนึ่งของเหตุผลที่ฉันชอบสไตล์นี้น่าจะเกี่ยวข้องกับหลายปีที่ฉันใช้การเข้ารหัส Modula-2 และ Ada ซึ่งทั้งสองแบบมีรูปแบบคล้ายกันกับไฟล์ข้อมูลจำเพาะและไฟล์เนื้อหา ฉันมีเพื่อนร่วมงานมีความรู้ใน C ++ มากกว่าฉันซึ่งยืนยันว่าการประกาศ C ++ ทั้งหมดควรเป็นไปได้ที่จะรวมคำจำกัดความที่มีในไฟล์ส่วนหัว เขาไม่ได้บอกว่านี่เป็นสไตล์ทางเลือกที่ถูกต้องหรือสไตล์ที่ดีขึ้นเล็กน้อย แต่นี่เป็นสไตล์ที่เป็นที่ยอมรับในระดับสากลที่ทุกคนใช้สำหรับ C ++ ฉันไม่ได้งอเหมือนที่เคยเป็นดังนั้นฉันจึงไม่กังวลที่จะเข้าหา bandwagon ของเขาจนกว่าฉันจะเห็นคนอีกไม่กี่คนอยู่ข้างๆเขา ดังนั้นสำนวนนี้เป็นเรื่องธรรมดามากจริง ๆ ? เพียงเพื่อให้โครงสร้างบางอย่างเพื่อตอบ: ตอนนี้มันเป็นวิธีที่พบมากค่อนข้างทั่วไปเรื่องผิดปกติหรือข้อผิดพลาดออกบ้า?

2
การดำเนินงาน &&& ในค
#include &lt;stdio.h&gt; volatile int i; int main() { int c; for (i = 0; i &lt; 3; i++) { c = i &amp;&amp;&amp; i; printf("%d\n", c); } return 0; } ผลลัพธ์ของโปรแกรมข้างต้นที่คอมไพล์ใช้gccคือ 0 1 1 ด้วย-Wallหรือ-Waddressตัวเลือกgccออกคำเตือน: warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress] การcประเมินในโปรแกรมข้างต้นเป็นอย่างไร

6
เหตุใด std :: map ถูกนำไปใช้เป็นต้นไม้สีแดงดำ
ทำไมถูกstd::mapนำไปใช้เป็นต้นไม้สีแดงดำ ? มีโครงสร้างการค้นหาแบบทวิภาคที่สมดุลหลายต้น (BST) อะไรคือข้อดีของการออกแบบต้นไม้สีแดง - ดำ


7
วิธีเปิดคำเตือนทั้งหมดของ GCC (ตามตัวอักษร)?
ผมอยากจะเปิดใช้งาน - ตัวอักษร - ทั้งหมดของคำเตือนที่มี GCC (คุณคิดว่ามันจะง่าย ... ) คุณคิดว่า -Wallอาจอาจทำกลอุบาย แต่ไม่! -Wextraยังคงต้อง คุณ-Wextraอาจคิดว่าอาจทำกลอุบาย แต่ไม่! ไม่ใช่คำเตือนทั้งหมดที่ระบุไว้ที่นี่ (ตัวอย่างเช่น-Wshadow) ไม่ได้เปิดใช้งานโดยสิ่งนี้ และฉันก็ยังไม่รู้ว่ารายการนี้ครอบคลุมหรือไม่ ฉันจะบอกให้ GCC เปิดใช้งานได้ (ไม่ว่าจะเป็นหรือไม่ก็เป็นได้ แต่อย่างเดียว) ทั้งหมดคำเตือนที่มีอยู่หรือไม่

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