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

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

1
เหตุใดเวกเตอร์ <bool> ของ libc ++ :: const_reference จึงไม่ใช่บูล
มาตรา 23.3.7 คลาสvector&lt;bool&gt;[vector.bool] วรรค 1 ระบุ: template &lt;class Allocator&gt; class vector&lt;bool, Allocator&gt; { public: // types: typedef bool const_reference; ... อย่างไรก็ตามโปรแกรมนี้ไม่สามารถคอมไพล์เมื่อใช้ libc ++: #include &lt;vector&gt; #include &lt;type_traits&gt; int main() { static_assert(std::is_same&lt;std::vector&lt;bool&gt;::const_reference, bool&gt;{}, "?"); } นอกจากนี้ฉันทราบว่ามาตรฐาน C ++ มีความสอดคล้องกันในข้อกำหนดนี้ตลอดไปจนถึง C ++ 98 และฉันทราบเพิ่มเติมว่า libc ++ ไม่ได้ปฏิบัติตามข้อกำหนดนี้อย่างต่อเนื่องตั้งแต่การเปิดตัว libc ++ ครั้งแรก อะไรคือแรงจูงใจสำหรับการไม่ปฏิบัติตามนี้?

6
const_cast ปลอดภัยหรือไม่?
const_castฉันไม่สามารถหาข้อมูลมากใน ข้อมูลเดียวที่ฉันพบ (ใน Stack Overflow) คือ: const_cast&lt;&gt;()จะใช้ในการเพิ่ม / ลบ const (เนส) (หรือระเหย-Ness) ของตัวแปร นี่ทำให้ฉันกังวล อาจconst_castทำให้เกิดพฤติกรรมที่ไม่คาดคิดได้หรือไม่? ถ้าเป็นเช่นนั้นคืออะไร? อีกวิธีหนึ่งคือใช้เมื่อconst_castใด

1
แปลว่าอะไร?
ฉันมี 2 คลาส: class base { virtual void foo() {}; }; class derived : public base { void foo() { base::foo(); } }; ฉันทำผิดพลาดและเขียนแทนbase:foo(); base::foo();มีการคอมไพล์และรันโค้ด แต่ผิดพลาด ฉันไม่รู้ว่าฉันสามารถ Google ได้อย่างไรและไม่รู้ว่ามันคืออะไร แต่ฉันสนใจมากนั่นหมายความว่าอย่างไร base:foo(); หากมีความสำคัญ: class base : public QAbstractGraphicsShapeItem
92 c++  syntax 

8
Python เร็วและเบากว่า C ++ หรือไม่? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม &amp; ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันคิดเสมอว่าข้อดีของ Python คือความสามารถในการอ่านโค้ดและความเร็วในการพัฒนา แต่การใช้เวลาและหน่วยความจำไม่ดีเท่า C ++ สถิติเหล่านี้ทำให้ฉันประทับใจอย่างมาก ประสบการณ์ของคุณบอกอะไรคุณเกี่ยวกับเวลา Python เทียบกับ C ++ และการใช้หน่วยความจำ

10
เหตุใด memcpy () และ memmove () จึงเร็วกว่าการเพิ่มตัวชี้
ฉันกำลังคัดลอก N ไบต์จากไปpSrc pDestสามารถทำได้ในลูปเดียว: for (int i = 0; i &lt; N; i++) *pDest++ = *pSrc++ ทำไมช้ากว่านี้memcpyหรือmemmove? พวกเขาใช้เทคนิคอะไรเพื่อเร่งความเร็ว?
92 c++  c  loops 

10
ฉันจะปรับปรุงประสิทธิภาพผ่านแนวทางระดับสูงได้อย่างไรเมื่อใช้สมการแบบยาวใน C ++
ฉันกำลังพัฒนาแบบจำลองทางวิศวกรรมบางอย่าง สิ่งนี้เกี่ยวข้องกับการใช้สมการยาวบางอย่างเช่นสมการนี้เพื่อคำนวณความเค้นในวัสดุเช่นยาง: T = ( mu * ( pow(l1 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a * ( pow(l1 * l2 * l3, -0.1e1 / 0.3e1) - l1 * l2 * l3 * pow(l1 * l2 * l3, -0.4e1 / 0.3e1) / 0.3e1 ) * …

9
((a + (b & 255)) & 255) เหมือนกับ ((a + b) & 255) หรือไม่
ฉันกำลังเรียกดูรหัส C ++ และพบสิ่งนี้: (a + (b &amp; 255)) &amp; 255 สองครั้งและทำให้ฉันรำคาญดังนั้นฉันจึงนึกถึง: (a + b) &amp; 255 ( aและbเป็นจำนวนเต็ม 32 บิตที่ไม่ได้ลงชื่อ) ฉันเขียนสคริปต์ทดสอบ (JS) อย่างรวดเร็วเพื่อยืนยันทฤษฎีของฉัน: for (var i = 0; i &lt; 100; i++) { var a = Math.ceil(Math.random() * 0xFFFF), b = Math.ceil(Math.random() * 0xFFFF); var expr1 = (a + …
92 c++  binary  logic 

13
LLVM C ++ IDE สำหรับ Windows
มี C / C ++ IDE สำหรับ Windows ซึ่งรวมเข้ากับคอมไพเลอร์ LLVM (และตัววิเคราะห์ Clang C / C ++) เช่นเดียวกับ Xcode สมัยใหม่หรือไม่ ฉันมี Dev-Cpp (ใช้ GCC ที่ล้าสมัย) และCode :: Blocks (กับ GCC บางส่วน) แต่ GCC ให้ข้อความแสดงข้อผิดพลาดที่คลุมเครือมาก ฉันต้องการรับข้อความแสดงข้อผิดพลาดที่เป็นมิตรกับผู้ใช้มากขึ้นจากส่วนหน้าเสียงดัง ใช่ Clang ไม่สามารถใช้กับโค้ด C ++ ที่ซับซ้อนได้ แต่ trunk Clang สามารถคอมไพล์ LLVM เองได้แล้ว ดังนั้นฉันจึงสงสัยว่ามี LLVM IDE ในการพัฒนาหรือในเวอร์ชันเบต้าหรือไม่ …
92 c++  windows  ide  llvm  clang 

5
libstdc ++ so.6: ไม่สามารถเปิดไฟล์อ็อบเจ็กต์ที่แชร์: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
ฉันต้องการเรียกใช้คำสั่ง Cilkscreen ด้วยโปรแกรม cilk ++ แต่ฉันได้รับข้อผิดพลาดนี้ /usr/local/cilk/bin/../lib32/pinbin: เกิดข้อผิดพลาดขณะโหลดไลบรารีที่แบ่งใช้: libstdc ++ ดังนั้น 6: ไม่สามารถเปิดไฟล์อ็อบเจ็กต์ที่แชร์: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว ได้โปรดช่วยฉันหน่อยได้ไหม
92 c++  cilk  cilk-plus 

3
ข้อมูลประเภทไหลย้อนกลับใน C ++ เมื่อใด
ฉันเพิ่งดู Stephan T. Lavavej พูดในCppCon 2018เรื่อง "Class Template Argument Deduction" ซึ่งในบางครั้งเขาก็พูดว่า: ข้อมูลชนิด C ++ เกือบจะไม่ไหลย้อนกลับ ... ผมต้องพูดว่า "เกือบ" เพราะมีหนึ่งหรือสองกรณีอาจจะมากกว่า แต่น้อยมาก แม้จะพยายามคิดว่ากรณีใดที่เขาอาจอ้างถึง แต่ฉันก็คิดอะไรไม่ออก ดังนั้นคำถาม: ในกรณีใดบ้างที่มาตรฐาน C ++ 17 กำหนดให้ข้อมูลประเภทเผยแพร่ย้อนกลับ

3
wtf คือ WTF? (ในฐานรหัส WebKit)
ฉันดาวน์โหลดโครเมียมฐานรหัส 's และวิ่งข้ามnamespace WTF namespace WTF { /* * C++'s idea of a reinterpret_cast lacks sufficient cojones. */ template&lt;typename TO, typename FROM&gt; TO bitwise_cast(FROM in) { COMPILE_ASSERT(sizeof(TO) == sizeof(FROM), WTF_wtf_reinterpret_cast_sizeof_types_is_equal); union { FROM from; TO to; } u; u.from = in; return u.to; } } // namespace WTF นี่หมายความว่าฉันคิดว่ามันหมายความว่าอย่างไร? อาจเป็นเช่นนั้นbitwise_castการนำไปใช้งานที่ระบุไว้ที่นี่จะไม่รวบรวมถ้าอย่างใดอย่างหนึ่งTOหรือFROMไม่ใช่PODและไม่ …
92 c++  webkit  chromium 

6
ตัวแปรสมาชิกที่ไม่ได้ใช้ใช้หน่วยความจำหรือไม่?
การเตรียมใช้งานตัวแปรสมาชิกและไม่อ้างถึง / ใช้งานจะใช้ RAM เพิ่มเติมในระหว่างรันไทม์หรือคอมไพเลอร์ไม่สนใจตัวแปรนั้น struct Foo { int var1; int var2; Foo() { var1 = 5; std::cout &lt;&lt; var1; } }; ในตัวอย่างข้างต้นสมาชิก 'var1' จะได้รับค่าที่แสดงในคอนโซล อย่างไรก็ตาม 'Var2' ไม่ได้ใช้เลย ดังนั้นการเขียนลงในหน่วยความจำระหว่างรันไทม์จะเป็นการสิ้นเปลืองทรัพยากร คอมไพลเลอร์นำสถานการณ์เหล่านี้มาใช้ในบัญชีและไม่สนใจตัวแปรที่ไม่ได้ใช้หรืออ็อบเจ็กต์ Foo มีขนาดเท่ากันเสมอไม่ว่าจะใช้สมาชิกหรือไม่
92 c++  memory  struct 

4
เหตุใด (เฉพาะ) คอมไพเลอร์บางตัวจึงใช้แอดเดรสเดียวกันสำหรับตัวอักษรสตริงที่เหมือนกัน
https://godbolt.org/z/cyBiWY ฉันเห็น'some'ตัวอักษรสองตัวในโค้ดแอสเซมเบลอร์ที่สร้างโดย MSVC แต่มีเพียงตัวเดียวที่มี clang และ gcc สิ่งนี้นำไปสู่ผลลัพธ์ของการเรียกใช้โค้ดที่แตกต่างกันโดยสิ้นเชิง static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } } ใครสามารถอธิบายความแตกต่างและความคล้ายคลึงกันระหว่างผลลัพธ์การคอมไพล์เหล่านั้นได้บ้าง เหตุใด clang / gcc จึงเพิ่มประสิทธิภาพบางอย่างแม้ว่าจะไม่มีการร้องขอการปรับให้เหมาะสมก็ตาม นี่เป็นพฤติกรรมที่ไม่ได้กำหนดหรือไม่? ฉันยังสังเกตเห็นว่าถ้าฉันเปลี่ยนการประกาศเป็นที่แสดงด้านล่าง clang / gcc / msvc จะไม่ทิ้ง"some"รหัสแอสเซมเบลอร์เลย ทำไมพฤติกรรมถึงแตกต่างกัน? static …


3
อะไรทำให้เกิดสัญญาณ 'SIGILL'
ฉันกำลังโอนรหัส C ++ ไปยัง Android โดยใช้ NDK และ GCC โดยทั่วไปโค้ดจะทำงาน จนถึงจุดหนึ่งเมื่อทำการดีบักใน Eclipse การเรียกใช้ Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory; ทำให้เกิดข้อผิดพลาดนี้: Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.) 1 &lt;symbol is not available&gt; 0x812feb44 นั่นหมายความว่าอย่างไร? คอมไพเลอร์สร้างรหัสที่ผิดกฎหมายด้วยเหตุผลบางประการหรือไม่? ฉันมีเบรกพอยต์ในตัวสร้าง (ซึ่งไม่ทำอะไรเลย) และมันไม่โดน ฉันได้ทำการสร้างใหม่ทั้งหมดแล้ว ฉันทำอะไรผิดที่ทำให้เกิดปัญหานี้

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