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

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

5
อะไรคือประเด็นของ noreturn?
[dcl.attr.noreturn]ให้ตัวอย่างต่อไปนี้: [[ noreturn ]] void f() { throw "error"; // OK } แต่ผมไม่เข้าใจสิ่งที่เป็นจุดของเพราะประเภทการกลับมาของฟังก์ชั่นที่มีอยู่แล้ว[[noreturn]]void ดังนั้นประเด็นของnoreturnคุณสมบัติคืออะไร? ควรใช้อย่างไร?

8
วิธีที่ดีที่สุดในการเชื่อมสองเวกเตอร์คืออะไร?
ฉันกำลังใช้มัลติเธรดและต้องการผสานผลลัพธ์ ตัวอย่างเช่น: std::vector<int> A; std::vector<int> B; std::vector<int> AB; ฉันต้องการให้ AB ต้องมีเนื้อหาของ A และเนื้อหาของ B ตามลำดับนั้น วิธีที่มีประสิทธิภาพมากที่สุดในการทำอะไรเช่นนี้คืออะไร?
189 c++  vector 

4
เหตุใดจึงใช้คลาสที่ซ้อนกันใน C ++
ใครช่วยชี้ให้ฉันดูแหล่งข้อมูลดีๆเพื่อทำความเข้าใจและใช้คลาสที่ซ้อนกันได้ ฉันมีเนื้อหาบางอย่างเช่นหลักการเขียนโปรแกรมและสิ่งต่าง ๆ เช่นIBM Knowledge Center - Nested Classes นี้ แต่ฉันยังคงมีปัญหาในการทำความเข้าใจวัตถุประสงค์ของพวกเขา มีคนช่วยฉันหน่อยได้ไหม


10
อะไรคือผลของการสั่งซื้อถ้า ... หากงบโดยความน่าจะเป็น
โดยเฉพาะอย่างยิ่งถ้าฉันมีชุดคำสั่งif... else ifและฉันก็รู้ว่าความน่าจะเป็นแบบสัมพัทธ์ที่แต่ละคำสั่งจะประเมินเป็นtrueเท่าใดความแตกต่างของเวลาการดำเนินการจึงทำให้เรียงลำดับตามความน่าจะเป็นเท่าใด ตัวอย่างเช่นฉันควรจะชอบสิ่งนี้: if (highly_likely) //do something else if (somewhat_likely) //do something else if (unlikely) //do something สำหรับสิ่งนี้?: if (unlikely) //do something else if (somewhat_likely) //do something else if (highly_likely) //do something ดูเหมือนว่ารุ่นที่เรียงจะเร็วกว่าอย่างไรก็ตามเพื่อความสะดวกในการอ่านหรือการมีผลข้างเคียงเราอาจต้องการเรียงลำดับแบบไม่เหมาะสม เป็นการยากที่จะบอกได้ว่า CPU จะทำอย่างไรกับการคาดคะเนสาขาจนกว่าคุณจะเรียกใช้รหัสจริง ดังนั้นในการทดลองกับสิ่งนี้ฉันลงเอยด้วยการตอบคำถามของฉันเองสำหรับกรณีเฉพาะ แต่ฉันต้องการฟังความคิดเห็น / ข้อมูลเชิงลึกอื่น ๆ ด้วย สำคัญ: คำถามนี้สันนิษฐานว่าifคำสั่งนั้นสามารถเรียงลำดับใหม่โดยพลการโดยไม่มีผลกระทบใด ๆ ต่อพฤติกรรมของโปรแกรม ในคำตอบของฉันการทดสอบตามเงื่อนไขสามข้อนั้นไม่เหมือนกันและไม่มีผลข้างเคียง แน่นอนถ้างบต้องได้รับการประเมินในลำดับที่แน่นอนเพื่อให้บรรลุพฤติกรรมที่ต้องการบางอย่างแล้วปัญหาของประสิทธิภาพคือ moot

5
อาร์กิวเมนต์แม่แบบเริ่มต้นสำหรับแม่แบบฟังก์ชัน
เหตุใดแม่แบบเริ่มต้นจึงอนุญาตให้ใช้เฉพาะในแม่แบบชั้นเรียนเท่านั้น ทำไมเราไม่สามารถกำหนดประเภทเริ่มต้นในเทมเพลตฟังก์ชันสมาชิกได้? ตัวอย่างเช่น: struct mycclass { template<class T=int> void mymember(T* vec) { // ... } }; แต่ C ++ จะบังคับให้อาร์กิวเมนต์แม่แบบเริ่มต้นนั้นได้รับอนุญาตในแม่แบบคลาสเท่านั้น
187 c++  templates 


9
ฉันจะสร้างเอาต์พุต CMake ให้เป็น 'bin' dir ได้อย่างไร
ขณะนี้ฉันกำลังสร้างโครงการด้วยโครงสร้างปลั๊กอิน ฉันใช้ CMake เพื่อรวบรวมโครงการ ปลั๊กอินจะรวบรวมในไดเรกทอรีที่แยกต่างหาก ปัญหาของฉันคือ CMake รวบรวมและบันทึกไบนารีและปลั๊กอินไลบรารีแบบไดนามิกในโครงสร้างไดเรกทอรีของแหล่งที่มา ฉันจะทำให้ CMake บันทึกไฟล์ในบางสิ่งเช่นไดเรกทอรี. / bin ได้อย่างไร
187 c++  plugins  cmake 

11
คำเตือนคอมไพเลอร์“ ไม่มีบรรทัดใหม่ที่ท้ายไฟล์”
อะไรคือสาเหตุของคำเตือนต่อไปนี้ในคอมไพเลอร์ C ++ บางตัว? ไม่มีการขึ้นบรรทัดใหม่ท้ายไฟล์ เหตุใดฉันจึงควรมีบรรทัดว่างท้ายไฟล์ต้นทาง / ส่วนหัว

21
จะใช้ enums เป็นค่าสถานะใน C ++ ได้อย่างไร
การรักษาenums ในฐานะธงทำงานได้ดีใน C # ผ่านทาง[Flags]ททริบิวต์ แต่วิธีที่ดีที่สุดในการทำ C ++ คืออะไร ตัวอย่างเช่นฉันต้องการเขียน: enum AnimalFlags { HasClaws = 1, CanFly =2, EatsFish = 4, Endangered = 8 }; seahawk.flags = CanFly | EatsFish | Endangered; อย่างไรก็ตามฉันได้รับข้อผิดพลาดเกี่ยวกับคอมไพเลอร์int/ enumการแปลง มีวิธีที่ดีกว่าในการแสดงนี้มากกว่าเพียงแค่การขว้างทื่อหรือไม่? โดยเฉพาะอย่างยิ่งฉันไม่ต้องการพึ่งพาโครงสร้างจากห้องสมุดบุคคลที่สามเช่น boost หรือ Qt แก้ไข: ตามที่ระบุไว้ในคำตอบที่ฉันสามารถหลีกเลี่ยงการรวบรวมข้อผิดพลาดด้วยการประกาศเป็นseahawk.flags intอย่างไรก็ตามฉันต้องการมีกลไกในการบังคับใช้ความปลอดภัยประเภทดังนั้นบางคนไม่สามารถเขียนseahawk.flags = HasMaximizeButtonได้
187 c++  enums 

14
วงเล็บปีกกาที่ไม่จำเป็นใน C ++?
เมื่อทำการตรวจสอบรหัสสำหรับเพื่อนร่วมงานวันนี้ฉันเห็นสิ่งที่แปลกประหลาด เขาล้อมรอบโค้ดใหม่ด้วยเครื่องหมายปีกกาดังนี้: Constructor::Constructor() { existing code { New code: do some new fancy stuff here } existing code } อะไรคือผลลัพธ์ถ้ามีจากนี้? อะไรคือสาเหตุของการทำเช่นนี้? นิสัยนี้มาจากไหน แก้ไข: จากข้อมูลที่ป้อนเข้าและคำถามด้านล่างฉันรู้สึกว่าฉันต้องเพิ่มคำถามลงไปแม้ว่าฉันจะทำเครื่องหมายคำตอบแล้ว สภาพแวดล้อมเป็นอุปกรณ์ฝังตัว มีรหัส C แบบดั้งเดิมจำนวนมากที่ห่อหุ้มด้วยเสื้อผ้า C ++ มีนักพัฒนา C ++ จำนวนมากหันมาใช้ C ++ ไม่มีส่วนที่สำคัญในส่วนนี้ของรหัส ฉันเพิ่งเห็นมันในส่วนนี้ของรหัส ไม่มีการจัดสรรหน่วยความจำที่สำคัญเสร็จสิ้นเพียงตั้งค่าสถานะบางอย่างและตั้งค่าบิต รหัสที่ล้อมรอบด้วยเครื่องหมายปีกกาคือ: { bool isInit; (void)isStillInInitMode(&isInit); if (isInit) { return isInit; } …

16
ฉันจะโทร :: std :: make_shared ในคลาสที่มีเพียง constructor ที่ได้รับการป้องกันหรือส่วนตัวได้อย่างไร
ฉันมีรหัสนี้ใช้งานไม่ได้ แต่ฉันคิดว่าเจตนาชัดเจน: testmakeshared.cpp #include <memory> class A { public: static ::std::shared_ptr<A> create() { return ::std::make_shared<A>(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr<A> foo() { return A::create(); } แต่ฉันได้รับข้อผิดพลาดนี้เมื่อรวบรวม: g++ -std=c++0x -march=native -mtune=native -O3 -Wall testmakeshared.cpp In file included …
187 c++  c++11  shared-ptr 

3
สาขา () สาขามากกว่าที่คาดไว้หรือไม่
พิจารณารหัสต่อไปนี้: #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i = 0; i < 2; i++) { fork(); printf("."); } return 0; } โปรแกรมนี้ให้ผลลัพธ์ 8 จุด เป็นไปได้อย่างไร? ไม่ควรมี 6 จุดแทนใช่ไหม
186 c++  c  fork 

4
อะไรที่ทำให้ i = i ++ + 1; ถูกกฎหมายใน C ++ 17?
ก่อนที่คุณจะเริ่มตะโกนพฤติกรรมที่ไม่ได้กำหนดสิ่งนี้จะปรากฏในN4659 (C ++ 17) อย่างชัดเจน i = i++ + 1; // the value of i is incremented ยังอยู่ในN3337 (C ++ 11) i = i++ + 1; // the behavior is undefined มีอะไรเปลี่ยนแปลง จากสิ่งที่ฉันสามารถรวบรวมได้จาก[N4659 basic.exec] ยกเว้นที่ระบุไว้การประเมินผลของตัวถูกดำเนินการของแต่ละตัวดำเนินการและ subexpressions ของแต่ละนิพจน์จะไม่เกิดขึ้น [... ] การคำนวณค่าของตัวถูกดำเนินการของผู้ประกอบการจะถูกจัดลำดับก่อนที่การคำนวณมูลค่าของผลลัพธ์ของผู้ประกอบการ หากผลข้างเคียงต่อตำแหน่งหน่วยความจำนั้นไม่สัมพันธ์กันกับผลข้างเคียงอื่นในตำแหน่งหน่วยความจำเดียวกันหรือการคำนวณค่าโดยใช้ค่าของวัตถุใด ๆ ในตำแหน่งหน่วยความจำเดียวกันและอาจไม่เกิดขึ้นพร้อมกันพฤติกรรมจะไม่ถูกกำหนด ตำแหน่งที่กำหนดค่าไว้ที่[N4659 basic.type] สำหรับประเภทที่คัดลอกได้เล็กน้อยการแทนค่าเป็นชุดของบิตในการแสดงวัตถุที่กำหนดค่าซึ่งเป็นองค์ประกอบที่แยกจากกันหนึ่งชุดของการกำหนดค่าการนำไปปฏิบัติ จาก[N3337 basic.exec] ยกเว้นที่ระบุไว้การประเมินผลของตัวถูกดำเนินการของแต่ละตัวดำเนินการและ subexpressions …

14
แทนที่ส่วนหนึ่งของสตริงด้วยสตริงอื่น
เป็นไปได้ใน C ++ เพื่อแทนที่ส่วนหนึ่งของสตริงด้วยสตริงอื่น? โดยทั่วไปฉันต้องการทำสิ่งนี้: QString string("hello $name"); string.replace("$name", "Somename"); แต่ฉันต้องการใช้ไลบรารี C ++ มาตรฐาน
186 c++  string  replace  substring  std 

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