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

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

13
วิธีที่ง่ายที่สุดในการแยกวิเคราะห์ไฟล์ INI ใน C ++ คืออะไร?
ฉันพยายามแยกวิเคราะห์ไฟล์ INI โดยใช้ C ++ เคล็ดลับใด ๆ เกี่ยวกับวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้ ฉันควรใช้เครื่องมือ Windows API สำหรับการประมวลผลไฟล์ INI (ซึ่งฉันไม่คุ้นเคยโดยสิ้นเชิง) โซลูชันโอเพ่นซอร์สหรือพยายามแยกวิเคราะห์ด้วยตนเอง
89 c++  winapi  ini  fileparse 

4
การรวบรวมโค้ดมัลติเธรดด้วย g ++
ฉันมีรหัสที่ง่ายที่สุดที่เคยมีมา: #include <iostream> #include <thread> void worker() { std::cout << "another thread"; } int main() { std::thread t(worker); std::cout << "main thread" << std::endl; t.join(); return 0; } แม้ว่าฉันจะยังไม่สามารถรวบรวมg++เพื่อเรียกใช้ รายละเอียดเพิ่มเติม: $ g++ --version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the …
89 c++  linux  ubuntu  gcc  g++ 

3
การเลิกใช้งานคำหลักคงที่ ... ไม่มีอีกแล้วหรือ
ใน C ++ เป็นไปได้ที่จะใช้staticคีย์เวิร์ดภายในหน่วยการแปลเพื่อส่งผลต่อการแสดงสัญลักษณ์ (ไม่ว่าจะเป็นการประกาศตัวแปรหรือฟังก์ชัน) ใน n3092 สิ่งนี้เลิกใช้แล้ว: ภาคผนวก D.2 [depr.static] การใช้คีย์เวิร์ดแบบคงที่จะเลิกใช้เมื่อประกาศอ็อบเจ็กต์ในขอบเขตเนมสเปซ (ดู 3.3.6) ใน n3225 สิ่งนี้ถูกลบออก บทความเดียวที่ฉันจะหาค่อนข้างเป็นทางการ แม้ว่าจะขีดเส้นใต้ว่าสำหรับความเข้ากันได้กับ C (และความสามารถในการคอมไพล์โปรแกรม C เป็น C ++) การเลิกใช้งานนั้นน่ารำคาญ อย่างไรก็ตามการรวบรวมโปรแกรม C โดยตรงเนื่องจาก C ++ อาจเป็นประสบการณ์ที่น่าหงุดหงิดอยู่แล้วดังนั้นฉันจึงไม่แน่ใจว่าควรพิจารณาหรือไม่ มีใครรู้บ้างว่าทำไมถึงเปลี่ยน?
89 c++  static  c++11  standards 

4
คำจำกัดความของคำว่า "ระเหย" นี้มีความผันผวนหรือ GCC มีปัญหาการปฏิบัติตามมาตรฐานหรือไม่
ฉันต้องการฟังก์ชันที่ (เช่น SecureZeroMemory จาก WinAPI) หน่วยความจำเป็นศูนย์เสมอและไม่ได้รับการปรับให้เหมาะสมแม้ว่าคอมไพเลอร์จะคิดว่าหน่วยความจำนั้นจะไม่ถูกเข้าถึงอีกเลยหลังจากนั้น ดูเหมือนผู้สมัครที่สมบูรณ์แบบสำหรับความผันผวน แต่ฉันมีปัญหาบางอย่างในการทำให้ GCC ทำงานได้จริง นี่คือฟังก์ชั่นตัวอย่าง: void volatileZeroMemory(volatile void* ptr, unsigned long long size) { volatile unsigned char* bytePtr = (volatile unsigned char*)ptr; while (size--) { *bytePtr++ = 0; } } ง่ายพอ แต่รหัสที่ GCC สร้างขึ้นจริงถ้าคุณเรียกว่ามันแตกต่างกันอย่างมากกับเวอร์ชันคอมไพเลอร์และจำนวนไบต์ที่คุณพยายามเป็นศูนย์ https://godbolt.org/g/cMaQm2 GCC 4.4.7 และ 4.5.3 ไม่เคยเพิกเฉยต่อความผันผวน GCC 4.6.4 และ 4.7.3 …
89 c++  c  gcc  standards 

4
วิธีจัดเก็บอาร์กิวเมนต์แม่แบบตัวแปร
เป็นไปได้ไหมที่จะจัดเก็บชุดพารามิเตอร์เพื่อใช้ในภายหลัง? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } จากนั้นในภายหลัง: void main(){ Action<int,int> add([](int x, int y){std::cout << (x+y);}, 3, …



2
COM (Component Object Model) โดยสรุปคืออะไร? [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน7 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ดูเหมือนว่าวัตถุ COM เป็นวัตถุใช้งานทั่วไปที่ควบคุมโดยระบบปฏิบัติการ วัตถุเป็นไปตามอินเทอร์เฟซที่เข้มงวดและอนุญาตให้คุณสอบถามวัตถุเพื่อกำหนดข้อมูล นี่คือวัตถุ COM หรือไม่?
89 c++  com 

4
อะไรคือคู่ที่ใกล้เคียงที่สุดกับ 1.0 นั่นไม่ใช่ 1.0
มีวิธีทางโปรแกรมในการรับ double ที่ใกล้เคียงกับ 1.0 มากที่สุด แต่จริงๆแล้วไม่ใช่ 1.0 หรือไม่? วิธีแฮ็ควิธีหนึ่งในการทำเช่นนี้คือการ memcpy สองเท่าให้เป็นจำนวนเต็มขนาดเท่ากันแล้วลบออก วิธีการทำงานของรูปแบบจุดลอยตัวของ IEEE754 สิ่งนี้จะจบลงด้วยการลดเลขชี้กำลังทีละหนึ่งในขณะที่เปลี่ยนส่วนเศษส่วนจากศูนย์ทั้งหมด (1.000000000000) เป็นค่าทั้งหมด (1.111111111111) อย่างไรก็ตามมีเครื่องจักรที่เก็บจำนวนเต็ม little-endian ในขณะที่ floating-point ถูกจัดเก็บ big-endian ดังนั้นจึงไม่สามารถใช้ได้เสมอไป

8
สาขาที่มีพฤติกรรมที่ไม่ได้กำหนดสามารถถือว่าไม่สามารถเข้าถึงได้และปรับให้เหมาะสมเป็นรหัสตายได้หรือไม่
พิจารณาข้อความต่อไปนี้: *((char*)NULL) = 0; //undefined behavior มันก่อให้เกิดพฤติกรรมที่ไม่ได้กำหนดไว้อย่างชัดเจน การมีอยู่ของคำสั่งดังกล่าวในโปรแกรมที่กำหนดหมายความว่าโปรแกรมทั้งหมดไม่ได้กำหนดไว้หรือพฤติกรรมนั้นจะไม่ได้กำหนดก็ต่อเมื่อโฟลว์การควบคุมมาถึงคำสั่งนี้ โปรแกรมต่อไปนี้จะถูกกำหนดไว้อย่างดีในกรณีที่ผู้ใช้ไม่เคยป้อนหมายเลข3หรือไม่? while (true) { int num = ReadNumberFromConsole(); if (num == 3) *((char*)NULL) = 0; //undefined behavior } หรือเป็นพฤติกรรมที่ไม่ได้กำหนดโดยสิ้นเชิงไม่ว่าผู้ใช้จะเข้ามา? นอกจากนี้คอมไพเลอร์สามารถสันนิษฐานได้ว่าพฤติกรรมที่ไม่ได้กำหนดจะไม่ถูกดำเนินการในรันไทม์? ซึ่งจะช่วยให้สามารถใช้เหตุผลย้อนหลังได้: int num = ReadNumberFromConsole(); if (num == 3) { PrintToConsole(num); *((char*)NULL) = 0; //undefined behavior } ที่นี่คอมไพเลอร์อาจให้เหตุผลว่าในกรณีที่num == 3เรามักจะเรียกใช้พฤติกรรมที่ไม่ได้กำหนด ดังนั้นกรณีนี้จะต้องเป็นไปไม่ได้และไม่จำเป็นต้องพิมพ์หมายเลข ifคำสั่งทั้งหมดสามารถปรับให้เหมาะสมได้ …

3
จะให้ฟังก์ชัน swap สำหรับคลาสของฉันได้อย่างไร?
อะไรคือวิธีที่เหมาะสมในการเปิดใช้swapอัลกอริทึมใน STL ของฉัน 1) swapสมาชิก ไม่std::swapใช้ SFINAE swapเคล็ดลับที่จะใช้สมาชิก 2) ยืนฟรีswapในเนมสเปซเดียวกัน 3) ความเชี่ยวชาญเฉพาะบางส่วนของstd::swap. 4) ทั้งหมดข้างต้น ขอขอบคุณ. แก้ไข: ดูเหมือนว่าฉันไม่ได้พูดคำถามของฉันอย่างชัดเจน โดยทั่วไปฉันมีคลาสเทมเพลตและฉันต้องการ STL algos เพื่อใช้วิธีการแลกเปลี่ยน (ที่มีประสิทธิภาพ) ที่ฉันเขียนสำหรับคลาสนั้น
89 c++  algorithm  stl  swap 

3
C ++ 11 ช่วยให้สามารถเริ่มต้นในคลาสของสมาชิกที่ไม่คงที่และไม่ใช่ const อะไรเปลี่ยนไป?
ก่อน C ++ 11 เราสามารถดำเนินการเริ่มต้นในคลาสเฉพาะกับสมาชิก const คงที่ของประเภทอินทิกรัลหรือการแจงนับ Stroustrup กล่าวถึงสิ่งนี้ในคำถามที่พบบ่อยเกี่ยวกับ C ++โดยให้ตัวอย่างต่อไปนี้: class Y { const int c3 = 7; // error: not static static int c4 = 7; // error: not const static const float c5 = 7; // error: not integral }; และเหตุผลต่อไปนี้: เหตุใดจึงมีข้อ จำกัด ที่ไม่สะดวกเหล่านี้? โดยทั่วไปคลาสจะถูกประกาศในไฟล์ส่วนหัวและโดยทั่วไปไฟล์ส่วนหัวจะรวมอยู่ในหน่วยการแปลจำนวนมาก อย่างไรก็ตามเพื่อหลีกเลี่ยงกฎตัวเชื่อมโยงที่ซับซ้อน C …

8
C ++ 11 emplace_back บน vector <struct>?
พิจารณาโปรแกรมต่อไปนี้: #include &lt;string&gt; #include &lt;vector&gt; using namespace std; struct T { int a; double b; string c; }; vector&lt;T&gt; V; int main() { V.emplace_back(42, 3.14, "foo"); } มันไม่ทำงาน: $ g++ -std=gnu++11 ./test.cpp In file included from /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h:34:0, from /usr/include/c++/4.7/bits/allocator.h:48, from /usr/include/c++/4.7/string:43, from ./test.cpp:1: /usr/include/c++/4.7/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator&lt;_Tp&gt;::construct(_Up*, _Args&amp;&amp; …
89 c++  c++11 

8
จะเรียก clang-format ผ่านโฟลเดอร์ cpp project ได้อย่างไร
มีวิธีเรียกสิ่งที่ต้องการclang-format --style=Webkitสำหรับโฟลเดอร์โครงการ cpp ทั้งหมดแทนที่จะเรียกใช้แยกกันสำหรับแต่ละไฟล์หรือไม่? ฉันกำลังใช้clang-format.pyและvimทำสิ่งนี้ แต่ฉันคิดว่ามีวิธีการใช้ครั้งเดียว

11
สวย - พิมพ์ std :: tuple
นี่เป็นคำถามที่ตามมาจากคำถามก่อนหน้าของฉันเกี่ยวกับคอนเทนเนอร์ STL ที่มีการพิมพ์สวยซึ่งเราได้จัดการเพื่อพัฒนาโซลูชันที่หรูหราและใช้งานทั่วไป ในขั้นตอนต่อไปนี้ฉันต้องการรวมการพิมพ์ที่สวยงามสำหรับการstd::tuple&lt;Args...&gt;ใช้เทมเพลตตัวแปร (ดังนั้นนี่คือ C ++ 11 อย่างเคร่งครัด) สำหรับstd::pair&lt;S,T&gt;ฉันพูดง่ายๆ std::ostream &amp; operator&lt;&lt;(std::ostream &amp; o, const std::pair&lt;S,T&gt; &amp; p) { return o &lt;&lt; "(" &lt;&lt; p.first &lt;&lt; ", " &lt;&lt; p.second &lt;&lt; ")"; } โครงสร้างที่คล้ายคลึงกันสำหรับการพิมพ์ทูเพิลคืออะไร? ฉันได้ลองใช้การแยกสแต็กอาร์กิวเมนต์เทมเพลตหลายบิตส่งดัชนีไปรอบ ๆ และใช้ SFINAE เพื่อค้นหาว่าฉันอยู่ที่องค์ประกอบสุดท้าย แต่ไม่ประสบความสำเร็จ ฉันไม่เป็นภาระให้คุณด้วยรหัสที่เสียของฉัน หวังว่าคำอธิบายปัญหาจะตรงไปตรงมาเพียงพอ โดยพื้นฐานแล้วฉันต้องการพฤติกรรมต่อไปนี้: auto a = std::make_tuple(5, "Hello", -0.1); …

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