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

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

3
จะตรวจสอบได้อย่างไรว่า std :: function ว่างใน C ++ 11 หรือไม่?
ฉันสงสัยว่าจะตรวจสอบอย่างไรว่าstd::functionว่างเปล่า ลองพิจารณาตัวอย่างนี้: class Test { std::function<void(int a)> eventFunc; void registerEvent(std::function<void(int a)> e) { eventFunc = e; } void doSomething() { ... eventFunc(42); } }; รหัสนี้รวบรวมได้ดีใน MSVC แต่ถ้าฉันโทรdoSomething()โดยไม่เริ่มต้นeventFuncรหัสจะขัดข้องอย่างเห็นได้ชัด เป็นที่คาดหวัง แต่ฉันสงสัยว่าค่าของeventFunc? 'empty'ดีบักเกอร์กล่าวว่า ดังนั้นฉันจึงแก้ไขโดยใช้คำสั่ง if ง่ายๆ: void doSomething() { ... if (eventFunc) { eventFunc(42); } } ใช้งานได้ แต่ฉันยังสงสัยว่าค่าของการไม่เริ่มต้นstd::functionคืออะไร? ฉันอยากจะเขียนif (eventFunc != nullptr)แต่std::function(ชัด ๆ …

9
ฉันจะพิมพ์ไปยังหน้าต่างผลลัพธ์การแก้ไขข้อบกพร่องในแอป Win32 ได้อย่างไร
ฉันมีโปรเจ็กต์ win32 ที่ฉันโหลดลงใน Visual Studio 2005 ฉันต้องการที่จะสามารถพิมพ์สิ่งต่าง ๆ ไปยังหน้าต่างเอาต์พุต Visual Studio แต่ฉันทำไม่ได้ตลอดชีวิตของฉัน ฉันได้ลอง 'printf' และ 'cout <<' แล้ว แต่ข้อความของฉันยังคงไม่ได้พิมพ์ออกมา มีวิธีพิเศษในการพิมพ์ไปยังหน้าต่างเอาต์พุต Visual Studio หรือไม่?

10
เหตุการณ์ Qt และสัญญาณ / สล็อต
ในโลก Qt เหตุการณ์และสัญญาณ / สล็อตต่างกันอย่างไร? หนึ่งแทนที่อีกคนหนึ่งหรือไม่? เหตุการณ์เป็นนามธรรมของสัญญาณ / สล็อตหรือไม่?
99 c++  qt 

2
วิธีกำหนดเส้นทางรวมหลายรายการใน Makefile
ใหม่สำหรับ C ++; ความเข้าใจพื้นฐานของรวมไลบรารีและกระบวนการคอมไพล์ ทำ makefiles ง่าย ๆ ยัง โครงการปัจจุบันของฉันเกี่ยวข้องกับการใช้ API ฐานข้อมูลข้อมูลและฉันจำเป็นต้องรวมไฟล์ส่วนหัวใน dirs ที่ไม่เป็นมาตรฐานมากกว่าหนึ่ง จะเขียนยังไงดี? ยังไม่พบสิ่งใดในเน็ตอาจเป็นเพราะฉันใช้คำค้นหาไม่ดี นี่เป็นวิธีหนึ่งที่ฉันพยายาม (ไม่ได้ผล) เพียงเพื่อแสดง makefile LIB=-L/usr/informix/lib/c++ INC=-I/usr/informix/incl/c++ /opt/informix/incl/public default: main main: test.cpp gcc -Wall $(LIB) $(INC) -c test.cpp #gcc -Wall $(LIB) $(INC) -I/opt/informix/incl/public -c test.cpp clean: rm -r test.o make.out
99 c++  include  makefile 

6
ข้อยกเว้นใน C ++ ช้ามาก
ฉันกำลังดูSystematic Error Handling ใน C ++ - Andrei Alexandrescuเขาอ้างว่าข้อยกเว้นใน C ++ นั้นช้ามาก นี่ยังคงเป็นจริงสำหรับ C ++ 98 หรือไม่?
99 c++ 

10
การแปลง QString เป็นถ่าน *
ฉันพยายามแปลง QString เป็นประเภท char * ด้วยวิธีการต่อไปนี้ แต่ดูเหมือนจะไม่ได้ผล //QLineEdit *line=new QLineEdit();{just to describe what is line here} QString temp=line->text(); char *str=(char *)malloc(10); QByteArray ba=temp.toLatin1(); strcpy(str,ba.data()); คุณสามารถอธิบายข้อบกพร่องที่เป็นไปได้ด้วยวิธีนี้หรือให้วิธีอื่นได้หรือไม่?
99 c++  qt  qstring  qtcore 


8
initializer_list และย้ายความหมาย
ฉันได้รับอนุญาตให้ย้ายองค์ประกอบออกจากไฟล์ std::initializer_list<T> ? #include <initializer_list> #include <utility> template<typename T> void foo(std::initializer_list<T> list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } เนื่องจากstd::intializer_list<T>ต้องการความสนใจของคอมไพเลอร์เป็นพิเศษและไม่มีค่าความหมายเหมือนคอนเทนเนอร์ปกติของไลบรารีมาตรฐาน C ++ ฉันควรจะปลอดภัยดีกว่าขอโทษและถาม

6
ฉันจะรวบรวม C ++ ด้วย Clang ได้อย่างไร
ฉันติดตั้งClangโดยใช้ apt-get ใน Ubuntu และฉันสามารถรวบรวมไฟล์ C ได้สำเร็จโดยใช้มัน อย่างไรก็ตามฉันไม่รู้ว่าจะรวบรวม C ++ ผ่านมันได้อย่างไร ฉันต้องทำอะไรเพื่อรวบรวม C ++
99 c++  clang 

3
<cstdint> เทียบกับ <stdint.h>
อะไรคือความแตกต่างระหว่างstdint.hและcstdint? ทั้งสองมีอยู่ใน MSVC (Visual Studio 2010) และ gcc-4.5.1 ทั้งคู่ยังกำหนดintX_t/ uintX_ttypes (โดยที่Xขนาดเป็นไบต์ของชนิด) หากเหตุผลในส่วนหัวทั้งสองเหมือนกัน (ประเภทพกพา) ฉันต้องตัดสินใจอะไรในการตัดสินใจอย่างใดอย่างหนึ่ง stdint.hกำหนดแต่ละประเภทโดยไม่ต้อง namespace ใด ๆcstdintชนิดอยู่ในstdnamespace มีเหตุผลใดบ้างที่จะรวมหรือไม่รวมประเภทที่กำหนดไว้ในstdเนมสเปซ อะไรคือความแตกต่างระหว่างสองส่วนหัว? cstdintไม่มีนามสกุลไฟล์และใช้cคำนำหน้าstdint.hใช้.hนามสกุล. หลักการตั้งชื่อสำหรับส่วนหัวนี้มีอะไรบ้าง? cคำนำหน้าบ่งบอกว่านี่เป็นห้องสมุด C? มีสาเหตุที่ทำให้ไม่มีนามสกุลไฟล์ในcstdint?
99 c++  stdint  cstdint 

16
ทำความสะอาดวิธีการเขียนลูป 'for' หลาย ๆ อัน
สำหรับอาร์เรย์ที่มีหลายมิติโดยปกติเราจะต้องเขียนforลูปสำหรับแต่ละมิติ ตัวอย่างเช่น: vector&lt; vector&lt; vector&lt;int&gt; &gt; &gt; A; for (int k=0; k&lt;A.size(); k++) { for (int i=0; i&lt;A[k].size(); i++) { for (int j=0; j&lt;A[k][i].size(); j++) { do_something_on_A(A[k][i][j]); } } } double B[10][8][5]; for (int k=0; k&lt;10; k++) { for (int i=0; i&lt;8; i++) { for (int j=0; j&lt;5; j++) { …
98 c++  for-loop 

4
คำตอบที่ถูกต้องสำหรับ cout << a ++ << a ;?
เมื่อเร็ว ๆ นี้ในการสัมภาษณ์มีคำถามประเภทวัตถุประสงค์ดังต่อไปนี้ int a = 0; cout &lt;&lt; a++ &lt;&lt; a; คำตอบ: ก. 10 ข. 01 ค. พฤติกรรมที่ไม่ได้กำหนด ฉันตอบตัวเลือก b คือเอาต์พุตจะเป็น "01" แต่ฉันต้องประหลาดใจในภายหลังฉันได้รับแจ้งจากผู้สัมภาษณ์ว่าคำตอบที่ถูกต้องคือตัวเลือก c: ไม่ได้กำหนด ตอนนี้ฉันรู้แนวคิดของลำดับจุดใน C ++ แล้ว พฤติกรรมไม่ได้กำหนดไว้สำหรับคำสั่งต่อไปนี้: int i = 0; i += i++ + i++; แต่ตามความเข้าใจของผมสำหรับคำสั่งcout &lt;&lt; a++ &lt;&lt; aที่ostream.operator&lt;&lt;()จะเรียกว่าเป็นครั้งที่สองครั้งแรกกับและต่อมาostream.operator&lt;&lt;(a++)ostream.operator&lt;&lt;(a) ฉันยังตรวจสอบผลลัพธ์บนคอมไพเลอร์ VS2010 และเอาต์พุตเป็น '01' ด้วย
98 c++  c++-faq 

4
ทำไมเราลอกแล้วย้าย?
ฉันเห็นรหัสที่ไหนสักแห่งที่มีคนตัดสินใจคัดลอกออบเจ็กต์แล้วย้ายไปยังสมาชิกข้อมูลของคลาส สิ่งนี้ทำให้ฉันสับสนเพราะฉันคิดว่าจุดทั้งหมดของการเคลื่อนไหวคือการหลีกเลี่ยงการคัดลอก นี่คือตัวอย่าง: struct S { S(std::string str) : data(std::move(str)) {} }; นี่คือคำถามของฉัน: ทำไมเราไม่ใช้ rvalue-reference str? สำเนาจะไม่แพงโดยเฉพาะอย่างยิ่งเช่นstd::string? อะไรคือสาเหตุที่ทำให้ผู้เขียนตัดสินใจทำสำเนาแล้วย้าย? เมื่อไหร่ที่ควรทำด้วยตัวเอง?

6
() ฉันจะนับรายการใน enum ได้อย่างไร?
คำถามนี้เกิดขึ้นในใจของฉันเมื่อฉันมีบางอย่างเช่น enum Folders {FA, FB, FC}; และต้องการสร้างอาร์เรย์ของคอนเทนเนอร์สำหรับแต่ละโฟลเดอร์: ContainerClass*m_containers[3]; .... m_containers[FA] = ...; // etc. (การใช้แผนที่มันสวยงามกว่ามากที่จะใช้std::map&lt;Folders, ContainerClass*&gt; m_containers;:) แต่เพื่อกลับไปที่คำถามเดิมของฉัน: ถ้าฉันไม่ต้องการฮาร์ดโค้ดขนาดอาร์เรย์จะมีวิธีคิดว่ามีกี่รายการในโฟลเดอร์หรือไม่? (โดยไม่ต้องอาศัยเช่นFCเป็นรายการสุดท้ายในรายการซึ่งจะอนุญาตบางอย่างเช่นContainerClass*m_containers[FC+1]ถ้าฉันจำไม่ผิด
98 c++  count  enumeration 

7
คำเตือน C ++: การหารสองด้วยศูนย์
กรณีที่ 1: #include &lt;iostream&gt; int main() { double d = 15.50; std::cout&lt;&lt;(d/0.0)&lt;&lt;std::endl; } มันรวบรวมโดยไม่มีคำเตือนใด ๆ infและภาพพิมพ์ ตกลง C ++ สามารถจัดการการหารด้วยศูนย์ได้ ( ดูสด ) แต่, กรณีที่ 2: #include &lt;iostream&gt; int main() { double d = 15.50; std::cout&lt;&lt;(d/0)&lt;&lt;std::endl; } คอมไพเลอร์ให้คำเตือนต่อไปนี้ ( ดูสด ): warning: division by zero [-Wdiv-by-zero] std::cout&lt;&lt;(d/0)&lt;&lt;std::endl; เหตุใดคอมไพเลอร์จึงแจ้งเตือนในกรณีที่สอง คือ0 != …

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