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

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

13
num ++ สามารถเป็นอะตอมสำหรับ 'int num' ได้หรือไม่
โดยทั่วไปสำหรับint num, num++(หรือ++num), ในฐานะการดำเนินการอ่าน - แก้ไข - การเขียนไม่ได้เป็นอะตอมมิก แต่ฉันมักจะเห็นคอมไพเลอร์เช่นGCCสร้างรหัสต่อไปนี้ ( ลองที่นี่ ): ตั้งแต่บรรทัดที่ 5 ซึ่งสอดคล้องกับnum++คำสั่งเดียวเราสามารถสรุปได้ว่าnum++ เป็นอะตอมในกรณีนี้หรือไม่? และถ้าเป็นเช่นนั้นหมายความว่าสิ่งที่สร้างขึ้นnum++สามารถนำมาใช้ในสถานการณ์พร้อมกัน (มัลติเธรด) โดยไม่มีอันตรายจากการแข่งขันของข้อมูล (เช่นเราไม่จำเป็นต้องทำตัวอย่างเช่นstd::atomic<int>และกำหนดค่าใช้จ่ายที่เกี่ยวข้องเนื่องจากเป็น ปรมาณูอยู่แล้ว)? UPDATE โปรดสังเกตว่าคำถามนี้ไม่ใช่ว่าการเพิ่มขึ้นเป็นอะตอมหรือไม่ (ไม่ใช่และนั่นคือและเป็นบรรทัดเปิดของคำถาม) มันอาจเป็นได้ในบางสถานการณ์หรือไม่เช่นในกรณีที่ใช้คำสั่งเดียวสามารถใช้เพื่อหลีกเลี่ยงค่าใช้จ่ายของlockคำนำหน้า และในฐานะที่เป็นคำตอบที่ได้รับการยอมรับกล่าวถึงในส่วนที่เกี่ยวกับเครื่องประมวลผลเดียวเช่นเดียวกับคำตอบนี้การสนทนาในความคิดเห็นและอื่น ๆ อธิบายว่ามันสามารถ (แม้ว่าจะไม่ใช่กับ C หรือ C ++)

11
RTTI แพงแค่ไหน?
ฉันเข้าใจว่ามีทรัพยากรที่ได้รับผลกระทบจากการใช้ RTTI แต่มันมีขนาดใหญ่เพียงใด ทุกที่ที่ฉันดูก็บอกว่า "RTTI มีราคาแพง" แต่ไม่มีพวกเขาจริง ๆ ที่ให้มาตรฐานหรือข้อมูลเชิงปริมาณเกี่ยวกับหน่วยความจำเวลาประมวลผลหรือความเร็ว ดังนั้น RTTI แพงแค่ไหน? ฉันอาจใช้กับระบบสมองกลฝังตัวที่ฉันมี RAM เพียง 4MB ดังนั้นทุกบิตจึงนับ แก้ไข: ตามคำตอบของ S. Lottมันจะดีกว่าถ้าฉันรวมสิ่งที่ฉันกำลังทำอยู่ ฉันใช้คลาสเพื่อส่งผ่านข้อมูลที่มีความยาวต่างกันและสามารถดำเนินการต่างๆ ได้ดังนั้นจึงเป็นการยากที่จะทำได้โดยใช้ฟังก์ชันเสมือนเท่านั้น ดูเหมือนว่าใช้ไม่กี่dynamic_castสามารถแก้ไขปัญหานี้ได้โดยอนุญาตให้คลาสที่ได้รับแตกต่างกันถูกส่งผ่านระดับที่แตกต่างกัน จากความเข้าใจของฉันdynamic_castใช้ RTTI ดังนั้นฉันสงสัยว่ามันจะเป็นไปได้อย่างไรที่จะใช้ในระบบที่ จำกัด
152 c++  performance  rtti 

7
มันปลอดภัยที่จะแยก / a / proc / ไฟล์?
ฉันต้องการแยกวิเคราะห์/proc/net/tcp/แต่ปลอดภัยหรือไม่ ฉันจะเปิดและอ่านไฟล์จาก/proc/และไม่ต้องกลัวว่ากระบวนการอื่น ๆ (หรือระบบปฏิบัติการของตัวเอง) จะเปลี่ยนแปลงในเวลาเดียวกันได้อย่างไร
152 c++  c  linux  unix  procfs 

8
คุณดีบักรหัส C ++ เป็นกลุ่มหรือไม่ อย่างไร?
คำถามนี้สำหรับทุกคนที่ใช้ Vim เพื่อพัฒนาแอพพลิเคชั่น C ++ มีช่วงเวลาหนึ่งในชีวิตของฉันซึ่งสามารถอธิบายได้ว่า 'ฉันเกลียด Vim !!!' .. 'Vim is nice!' อย่างไรก็ตามการเติบโตขึ้นส่วนใหญ่บน IDEs การพัฒนาของไมโครซอฟท์ฉันเคยชินกับการใช้งานF5- F11ทางลัดเมื่อทำการดีบั๊กโค้ด, หน้าต่างดู, call stack และรหัสหลัก - ทั้งหมดนี้มองเห็นได้โดยไม่จำเป็นต้องพิมพ์คำสั่ง GDB ใด ๆ ดังนั้นนี่คือคำถาม: คุณใช้ Vim เพื่อแก้จุดบกพร่องหรือไม่ หรือคุณเปลี่ยนไปใช้ IDE บางอย่างเพื่อจุดประสงค์นี้ อันไหน? สำหรับผู้ที่ใช้ Vim to debug code: มีปลั๊กอินสำหรับตั้งเบรกพอยต์ในตัวแก้ไขหรือไม่ให้ไฮไลต์บรรทัดที่เรากำลังทำการดีบัก, การนำทางอัตโนมัติในระหว่างขั้นตอน, ก้าวเข้าสู่, ก้าวออก? โปรดอย่าบอกฉันว่าคุณใช้ GDB เป็นบรรทัดคำสั่งดูบรรทัดเดียวที่ debugged และอื่น ๆ
152 c++  debugging  vim  gdb 

30
ต้องการเครื่องกำเนิดไฟฟ้าแบบสุ่มที่คาดการณ์ได้
ฉันเป็นผู้พัฒนาเกมบนเว็บและฉันมีปัญหากับตัวเลขสุ่ม สมมติว่าผู้เล่นมีโอกาส 20% ที่จะได้รับการโจมตีด้วยดาบอย่างรุนแรง นั่นหมายความว่า 1 ใน 5 การเข้าชมควรสำคัญ ปัญหาคือฉันได้ผลลัพธ์ในชีวิตจริงที่แย่มาก - บางครั้งผู้เล่นจะได้รับ 3 crits ใน 5 ครั้งบางครั้งก็ไม่มี 15 ครั้ง การต่อสู้ค่อนข้างสั้น (3-10 ครั้ง) ดังนั้นสิ่งสำคัญคือต้องมีการกระจายแบบสุ่มที่ดี ขณะนี้ฉันใช้ PHP mt_rand()แต่เราเพิ่งย้ายรหัสของเราไปยัง C ++ ดังนั้นฉันต้องการแก้ปัญหานี้ในเอ็นจิ้นใหม่ของเกม ฉันไม่ทราบว่าวิธีการแก้ปัญหาเป็นเครื่องกำเนิดไฟฟ้าแบบสุ่มสม่ำเสมอหรืออาจจะจำรัฐสุ่มก่อนหน้านี้เพื่อบังคับให้มีการแจกแจงที่เหมาะสม
151 c++  algorithm  random 

11
ค่าคงที่สุดท้ายเทียบกับ C ++ ของ Java
Java สำหรับการเขียนโปรแกรมภาษา C ++ กวดวิชากล่าวว่า (ไฮไลท์เป็นของตัวเอง): สุดท้ายคำหลักคือประมาณ เทียบเท่ากับ const ใน C ++ "คร่าวๆ" หมายความว่าอะไรในบริบทนี้ พวกเขาไม่เหมือนกันหรือ อะไรคือความแตกต่างถ้ามี?
151 java  c++  const  final 

5
ประกาศ enum ภายในคลาส
ในโค้ดต่อไปนี้Colorenum จะถูกประกาศภายในCarคลาสเพื่อ จำกัด ขอบเขตของ enum และพยายามที่จะไม่ "สร้างมลภาวะ" เนมสเปซส่วนกลาง class Car { public: enum Color { RED, BLUE, WHITE }; void SetColor( Car::Color color ) { _color = color; } Car::Color GetColor() const { return _color; } private: Car::Color _color; }; (1) นี่เป็นวิธีที่ดีในการ จำกัด ขอบเขตของColorenum หรือไม่? หรือฉันควรประกาศมันนอกCarชั้นเรียน แต่อาจจะอยู่ในเนมสเปซหรือ struct ของตัวเอง? ฉันเพิ่งมาข้ามบทความนี้ในวันนี้ซึ่งสนับสนุนหลังและกล่าวถึงจุดที่ดีบางอย่างเกี่ยวกับ …
151 c++  class  enums  namespaces  scope 

12
เครื่องมือฟรีในการตรวจสอบซอร์สโค้ด C / C ++ กับชุดของมาตรฐานการเข้ารหัสหรือไม่ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ มันดูง่ายที่จะหาเครื่องมือเช่นนี้สำหรับ Java ( Checkstyle , JCSC ) แต่ฉันไม่สามารถหาเครื่องมือสำหรับ C / C ++ ได้ ฉันไม่ได้มองหาเครื่องวิเคราะห์รหัสแบบคงที่ที่เป็นขุยฉันต้องการตรวจสอบกับมาตรฐานการเข้ารหัสเช่นการตั้งชื่อตัวแปรการใช้อักษรตัวพิมพ์ใหญ่การเว้นวรรคการระบุตำแหน่งการวางวงเล็บและอื่น ๆ
151 c++  c  coding-style 

5
C ++ เทียบเท่ากับ toString ของ Java?
ฉันต้องการควบคุมสิ่งที่เขียนไปยังกระแสข้อมูลเช่นcoutสำหรับวัตถุของคลาสที่กำหนดเอง เป็นไปได้ใน C ++ หรือไม่ ใน Java คุณสามารถแทนที่toString()วิธีการเพื่อวัตถุประสงค์ที่คล้ายกัน
151 c++ 

2
เดคไทป์ (อัตโนมัติ) มีประโยชน์อะไรบ้าง?
Наэтотвопросестьответына Stack Overflow нарусском : Конструкция decltype (อัตโนมัติ) ใน c ++ 14 มีการใช้decltype(auto)สำนวน โดยปกติการใช้งานของมันคือการอนุญาตให้มีautoการประกาศใช้decltypeกฎระเบียบเกี่ยวกับการแสดงออกที่กำหนด ค้นหาตัวอย่างของการใช้คำว่า "ดี" ของสำนวนฉันสามารถนึกถึงสิ่งต่าง ๆ ดังต่อไปนี้ (โดยสก็อตต์เมเยอร์ส ) นั่นคือสำหรับการคืนค่าประเภทของฟังก์ชัน : template<typename ContainerType, typename IndexType> // C++14 decltype(auto) grab(ContainerType&& container, IndexType&& index) { authenticateUser(); return std::forward<ContainerType>(container)[std::forward<IndexType>(index)]; } มีตัวอย่างอื่น ๆ ที่คุณสมบัติภาษาใหม่นี้มีประโยชน์หรือไม่

5
เมื่อมีการจัดสรรเวกเตอร์พวกเขาจะใช้หน่วยความจำบนกองหรือกอง?
ข้อความต่อไปนี้ทั้งหมดเป็นจริงหรือไม่? vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stack vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack vector<Type*> vect; //vect will be on stack and Type* will be …
151 c++  stl  vector  stack  heap 

4
ใน CMake ฉันจะทดสอบได้อย่างไรว่าคอมไพเลอร์เป็นเสียงดังกราว
เรามีชุดสคริปต์สร้างข้ามแพลตฟอร์ม CMakeและเราสนับสนุนการสร้างด้วยVisual C ++และ GCC เรากำลังลองเสียงดังกราวแต่ฉันไม่สามารถหาวิธีทดสอบได้ว่า Compiler นั้นเป็น Clang กับสคริปต์ CMake ของเราหรือไม่ สิ่งที่ฉันควรทดสอบเพื่อดูว่าคอมไพเลอร์เป็นเสียงดังกราวหรือไม่? ขณะนี้เรากำลังใช้MSVCและCMAKE_COMPILER_IS_GNU<LANG>ทดสอบ Visual C ++ และ GCC ตามลำดับ
151 c++  c  cmake  clang 

6
กำหนดบรรทัดของรหัสที่ทำให้เกิดความผิดพลาดในการแบ่งเซ็กเมนต์
หนึ่งจะกำหนดว่าข้อผิดพลาดอยู่ในรหัสที่ทำให้เกิดความผิดพลาดแบ่งส่วนได้อย่างไร คอมไพเลอร์ของฉันสามารถgccแสดงตำแหน่งของความผิดพลาดในโปรแกรมได้หรือไม่?

4
อาร์กิวเมนต์เริ่มต้นของเทมเพลต
หากฉันได้รับอนุญาตให้ทำสิ่งต่อไปนี้: template <typename T = int> class Foo{ }; ทำไมฉันไม่ได้รับอนุญาตให้ทำสิ่งต่อไปนี้ในหลัก Foo me; แต่ฉันต้องระบุสิ่งต่อไปนี้: Foo<int> me; C ++ 11 นำเสนอข้อโต้แย้งแม่แบบเริ่มต้นและตอนนี้พวกเขากำลังเข้าใจความเข้าใจของฉันอย่างสมบูรณ์
151 c++  templates 

4
ตัวเลือกระหว่าง vector :: resize () และ vector :: Reserve ()
ฉันจัดสรรหน่วยความจำล่วงหน้าให้กับvectorตัวแปรสมาชิกของฉัน รหัสด้านล่างเป็นส่วนที่น้อยที่สุด class A { vector<string> t_Names; public: A () : t_Names(1000) {} }; ตอนนี้ในบางจุดของเวลาถ้าเท่ากับt_Names.size() ฉันกำลังมีความประสงค์ที่จะเพิ่มขนาดโดย1000 100จากนั้นถ้ามันถึง1100ให้เพิ่มอีกครั้ง100และอื่น ๆ คำถามของฉันคือสิ่งที่ต้องเลือกระหว่างและvector::resize() vector::reserve()มีทางเลือกที่ดีกว่าในสถานการณ์ประเภทนี้หรือไม่? แก้ไข : t_Namesฉันมีการเรียงลำดับของการประมาณการที่แม่นยำสำหรับ เราคาดว่าจะเป็นรอบที่จะ700 800อย่างไรก็ตามในบาง (ไม่ค่อย) 1000สถานการณ์ก็สามารถเจริญเติบโตได้มากกว่า
151 c++  vector 

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