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

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

9
คุณจะปิดการใช้งานคำเตือนตัวแปรที่ไม่ได้ใช้งานที่ออกมาจาก gcc ในรหัสของบุคคลที่สามได้อย่างไร?
ฉันต้องการทราบว่าสวิตช์ใดที่คุณส่งต่อไปยังคอมไพเลอร์ gcc เพื่อปิดคำเตือนตัวแปรที่ไม่ได้ใช้ ฉันได้รับข้อผิดพลาดจากการเพิ่มประสิทธิภาพบน windows และฉันไม่ต้องการแตะรหัสเพิ่ม: C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] ฉันลองใช้ทั้งสองอย่าง-Wunused-valueและ-Wno-unused-valueไม่ได้ระงับข้อความข้างต้น คำสั่งที่ถูกต้องคืออะไรนี่คือบรรทัดคอมไพล์ของฉัน: g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion -Wdisabled-optimization …

8
ซึ่งเร็วกว่า: if (bool) หรือ if (int)?
ใช้คุ้มค่าไหนดี? บูลีนจริงหรือจำนวนเต็ม 1? หัวข้อดังกล่าวข้างต้นทำให้ผมทำการทดลองบางคนที่มีboolและintในifสภาพ ดังนั้นฉันจึงเขียนโปรแกรมนี้ด้วยความอยากรู้อยากเห็น: int f(int i) { if ( i ) return 99; //if(int) else return -99; } int g(bool b) { if ( b ) return 99; //if(bool) else return -99; } int main(){} g++ intbool.cpp -S สร้างรหัส asm สำหรับแต่ละฟังก์ชันดังนี้: รหัส asm สำหรับ f(int) __Z1fi: LFB0: pushl …
94 c++  assembly  int  boolean 

15
การแปลงบูลเป็นข้อความใน C ++
อาจจะเป็นคำถามโง่ ๆ แต่มีวิธีใดบ้างที่จะแปลงค่าบูลีนเป็นสตริงเพื่อให้ 1 เปลี่ยนเป็น "จริง" และ 0 เปลี่ยนเป็น "เท็จ" ฉันสามารถใช้คำสั่ง if ได้ แต่คงจะดีหากทราบว่ามีวิธีดำเนินการกับภาษาหรือไลบรารีมาตรฐานหรือไม่ นอกจากนี้ฉันเป็นคนอวดรู้ :)
94 c++  string  boolean 

5
การใช้ assert () ในการปฏิบัติที่ไม่ดีของ C ++ หรือไม่?
ฉันมักจะเพิ่มการยืนยันจำนวนมากให้กับโค้ด C ++ ของฉันเพื่อให้การดีบักง่ายขึ้นโดยไม่ส่งผลกระทบต่อประสิทธิภาพของการสร้างรุ่น ตอนนี้assertเป็นมาโคร C บริสุทธิ์ที่ออกแบบโดยไม่คำนึงถึงกลไก C ++ ในทางกลับกัน C ++ กำหนดstd::logic_errorซึ่งหมายถึงการโยนในกรณีที่มีข้อผิดพลาดในตรรกะของโปรแกรม (ดังนั้นชื่อ) การโยนอินสแตนซ์อาจเป็นทางเลือกที่สมบูรณ์แบบของ C ++ assertมากกว่า ปัญหาคือassertและabortทั้งสองยุติโปรแกรมทันทีโดยไม่ต้องเรียกผู้ทำลายดังนั้นการข้ามการล้างข้อมูลในขณะที่การทิ้งข้อยกเว้นด้วยตนเองจะเพิ่มต้นทุนรันไทม์โดยไม่จำเป็น วิธีหนึ่งในการแก้ปัญหานี้คือการสร้างมาโครการยืนยันของตัวเองSAFE_ASSERTซึ่งใช้งานได้เหมือนกับคู่ C แต่จะมีข้อยกเว้นสำหรับความล้มเหลว ฉันนึกถึงความคิดเห็นสามประการเกี่ยวกับปัญหานี้: ยึดมั่นในการยืนยันของ C เนื่องจากโปรแกรมถูกยกเลิกทันทีจึงไม่สำคัญว่าการเปลี่ยนแปลงจะถูกยกเลิกอย่างถูกต้องหรือไม่ นอกจากนี้การใช้#defines ใน C ++ ก็แย่พอ ๆ กัน โยนข้อยกเว้นและจับมันใน main () การอนุญาตให้รหัสข้ามตัวทำลายในสถานะใด ๆ ของโปรแกรมถือเป็นการปฏิบัติที่ไม่ดีและต้องหลีกเลี่ยงค่าใช้จ่ายทั้งหมดดังนั้นจึงมีการเรียกร้องให้ยุติ () หากมีการโยนข้อยกเว้นจะต้องถูกจับ ทิ้งข้อยกเว้นและให้มันยุติโปรแกรม ข้อยกเว้นในการยุติโปรแกรมนั้นไม่เป็นไรและเนื่องจากNDEBUGสิ่งนี้จะไม่เกิดขึ้นในรุ่นสร้าง การจับเป็นสิ่งที่ไม่จำเป็นและเปิดเผยรายละเอียดการนำโค้ดภายในไปmain()ใช้ มีคำตอบที่ชัดเจนสำหรับปัญหานี้หรือไม่? อ้างอิงมืออาชีพใด ๆ ? แก้ไข:แน่นอนว่าการข้ามผู้ทำลายล้างคือพฤติกรรมที่ไม่ได้กำหนด

2
วิธีการต่อท้ายรายการ <T> วัตถุกับวัตถุอื่น
ใน C ++ ฉันมีสองlist&lt;T&gt;วัตถุAและBฉันต้องการเพิ่มสมาชิกทั้งหมดBของA. ฉันได้ค้นหาแหล่งที่มาที่แตกต่างกันเล็กน้อยและไม่พบวิธีง่ายๆ (ei A.append(B);) และสิ่งนี้ทำให้ฉันประหลาดใจเล็กน้อย วิธีที่ดีที่สุดในการทำคืออะไร? เมื่อมันเกิดขึ้นฉันไม่สนใจ B หลังจากนี้ (มันจะถูกลบในบรรทัดถัดไป) ดังนั้นหากมีวิธีที่จะใช้ประโยชน์จากสิ่งนั้นเพื่อความสมบูรณ์แบบที่ดีขึ้นฉันก็สนใจเช่นกัน
94 c++  list  stl 

4
ตัวดำเนินการ << ต้องใช้อาร์กิวเมนต์เดียว
อา #include "logic.h" ... class A { friend ostream&amp; operator&lt;&lt;(ostream&amp;, A&amp;); ... }; logic.cpp #include "a.h" ... ostream&amp; logic::operator&lt;&lt;(ostream&amp; os, A&amp; a) { ... } ... เมื่อฉันรวบรวมมันบอกว่า: std :: ostream &amp; logic :: operator &lt;&lt; (std :: ostream &amp;, A &amp;) 'ต้องใช้อาร์กิวเมนต์เดียว อะไรคือปัญหา?

5
วิธีที่ง่ายที่สุดในการแปลงอาร์เรย์เป็นเวกเตอร์คืออะไร?
วิธีที่ง่ายที่สุดในการแปลงอาร์เรย์เป็นเวกเตอร์คืออะไร? void test(vector&lt;int&gt; _array) { ... } int x[3]={1, 2, 3}; test(x); // Syntax error. ฉันต้องการแปลง x จากอาร์เรย์ int เป็นเวกเตอร์ด้วยวิธีที่ง่ายที่สุด
94 c++  arrays  vector 


4
จะรับระยะเวลาเป็น int มิลลิวินาทีและลอยวินาทีจาก <chrono> ได้อย่างไร
ฉันพยายามใช้ chrono library สำหรับตัวจับเวลาและระยะเวลา ฉันต้องการที่จะมีDuration frameStart;(ตั้งแต่เริ่มต้นแอป) และDuration frameDelta;(เวลาระหว่างเฟรม) ฉันต้องสามารถรับframeDeltaระยะเวลาเป็นมิลลิวินาทีและวินาทีลอยได้ คุณทำสิ่งนี้กับ&lt;chrono&gt;ไลบรารีc ++ 11 ใหม่ได้อย่างไร ฉันทำงานกับมันและ googling (ข้อมูลกระจัดกระจาย) โค้ดได้รับการเทมเพลนอย่างมากและต้องใช้การร่ายและสิ่งต่างๆเป็นพิเศษฉันไม่สามารถหาวิธีใช้ไลบรารีนี้ได้อย่างถูกต้อง
94 c++  c++11  timer  chrono 

14
คุณจะเพิ่มการหน่วงเวลาลงในโปรแกรม C ++ ได้อย่างไร
ฉันกำลังพยายามเพิ่มเวลาหน่วงเวลาในโปรแกรม C ++ และสงสัยว่าใครมีคำแนะนำเกี่ยวกับสิ่งที่ฉันสามารถลองทำได้หรือข้อมูลที่ฉันสามารถดูได้บ้าง ฉันหวังว่าฉันจะมีรายละเอียดเพิ่มเติมเกี่ยวกับวิธีที่ฉันใช้การหน่วงเวลานี้ แต่จนกว่าฉันจะมีข้อมูลเพิ่มเติมเกี่ยวกับวิธีเพิ่มการหน่วงเวลาตามกำหนดเวลาฉันไม่แน่ใจว่าฉันควรจะพยายามใช้สิ่งนี้อย่างไร
94 c++  time 


8
แคสต์ที่ไม่ได้ลงชื่อเพื่อลงนามที่มีประสิทธิภาพหลีกเลี่ยงพฤติกรรมที่กำหนดการนำไปใช้งาน
ฉันต้องการกำหนดฟังก์ชันที่รับunsigned intอาร์กิวเมนต์เป็นและส่งคืนintโมดูโลที่สอดคล้องกัน UINT_MAX + 1 ให้กับอาร์กิวเมนต์ ความพยายามครั้งแรกอาจมีลักษณะดังนี้: int unsigned_to_signed(unsigned n) { return static_cast&lt;int&gt;(n); } แต่อย่างที่นักกฎหมายภาษาใด ๆ ทราบการคัดเลือกจากไม่ได้ลงนามเป็นเซ็นชื่อสำหรับค่าที่มีขนาดใหญ่กว่า INT_MAX นั้นถูกกำหนดให้ใช้งานได้ ฉันต้องการใช้สิ่งนี้ซึ่ง (ก) อาศัยเฉพาะพฤติกรรมที่กำหนดโดยข้อมูลจำเพาะเท่านั้น และ (b) รวบรวมเป็น no-op บนเครื่องที่ทันสมัยและปรับแต่งคอมไพเลอร์ สำหรับเครื่องจักรที่แปลกประหลาด ... หากไม่มีโมดูโลคอนดักเตอร์ int ที่ลงนาม UINT_MAX + 1 ไปยัง int ที่ไม่ได้ลงนามสมมติว่าฉันต้องการยกเว้น ถ้ามีมากกว่าหนึ่ง (ฉันไม่แน่ใจว่าเป็นไปได้) สมมติว่าฉันต้องการอันที่ใหญ่ที่สุด ตกลงครั้งที่สอง: int unsigned_to_signed(unsigned n) { int int_n = static_cast&lt;int&gt;(n); …

6
C ++ ยุติการเรียกโดยไม่มีข้อยกเว้นที่ใช้งานอยู่
ฉันได้รับข้อผิดพลาด C ++ กับเธรด: terminate called without an active exception Aborted นี่คือรหัส: #include &lt;queue&gt; #include &lt;thread&gt; #include &lt;mutex&gt; #include &lt;condition_variable&gt; template&lt;typename TYPE&gt; class blocking_stream { public: blocking_stream(size_t max_buffer_size_) : max_buffer_size(max_buffer_size_) { } //PUSH data into the buffer blocking_stream &amp;operator&lt;&lt;(TYPE &amp;other) { std::unique_lock&lt;std::mutex&gt; mtx_lock(mtx); while(buffer.size()&gt;=max_buffer_size) stop_if_full.wait(mtx_lock); buffer.push(std::move(other)); mtx_lock.unlock(); stop_if_empty.notify_one(); return *this; …

3
Explicit Return Type ของ Lambda
เมื่อฉันพยายามรวบรวมรหัสนี้ (VS2010) ฉันได้รับข้อผิดพลาดต่อไปนี้: error C3499: a lambda that has been specified to have a void return type cannot return a value void DataFile::removeComments() { string::const_iterator start, end; boost::regex expression("^\\s?#"); boost::match_results&lt;std::string::const_iterator&gt; what; boost::match_flag_type flags = boost::match_default; // Look for lines that either start with a hash (#) // or have nothing …

15
C ++ 11 มีคุณสมบัติ C # -style หรือไม่?
ใน C # มีน้ำตาลไวยากรณ์ที่ดีสำหรับฟิลด์ที่มี getter และ setter นอกจากนี้ฉันชอบคุณสมบัติที่ใช้งานอัตโนมัติซึ่งอนุญาตให้ฉันเขียนได้ public Foo foo { get; private set; } ใน C ++ ฉันต้องเขียน private: Foo foo; public: Foo getFoo() { return foo; } มีแนวคิดบางอย่างใน C ++ 11 ที่อนุญาตให้ฉันมีน้ำตาลไวยากรณ์ในเรื่องนี้หรือไม่
94 c#  c++  class  c++11 

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