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

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


4
การเชื่อมต่อสัญญาณและสล็อตที่โอเวอร์โหลดใน Qt 5
ฉันมีปัญหาในการจับกับไวยากรณ์สัญญาณ / สล็อตใหม่ (โดยใช้ตัวชี้ไปยังฟังก์ชันสมาชิก) ใน Qt 5 ตามที่อธิบายไว้ในใหม่สัญญาณสล็อตไวยากรณ์ ฉันลองเปลี่ยนสิ่งนี้: QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)); สำหรับสิ่งนี้: QObject::connect(spinBox, &QSpinBox::valueChanged, slider, &QSlider::setValue); แต่ฉันได้รับข้อผิดพลาดเมื่อพยายามรวบรวม: ข้อผิดพลาด: ไม่มีฟังก์ชันที่ตรงกันสำหรับการโทร QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int)) ฉันได้ลองใช้ clang และ gcc บน Linux ทั้งกับ-std=c++11ไฟล์. ฉันทำอะไรผิดและฉันจะแก้ไขได้อย่างไร
133 c++  qt  qt5 

6
ฉันจะใช้ deleter ที่กำหนดเองกับสมาชิก std :: unique_ptr ได้อย่างไร
ฉันมีชั้นเรียนที่มีสมาชิก unique_ptr class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar เป็นคลาสของบุคคลที่สามที่มีฟังก์ชัน create () และฟังก์ชัน destroy () หากฉันต้องการใช้ a std::unique_ptrร่วมกับมันในฟังก์ชันสแตนด์อโลนฉันสามารถทำได้: void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } มีวิธีดำเนินการในstd::unique_ptrฐานะสมาชิกของชั้นเรียนหรือไม่?

7
ฉันจะเรียงเวกเตอร์ของคู่ตามองค์ประกอบที่สองของคู่ได้อย่างไร
ถ้าฉันมีเวกเตอร์คู่: std::vector<std::pair<int, int> > vec; มีวิธีง่ายๆในการจัดเรียงรายการตามลำดับที่เพิ่มขึ้นตามองค์ประกอบที่สองของคู่หรือไม่? ฉันรู้ว่าฉันสามารถเขียนอ็อบเจกต์ฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่จะทำงานได้ แต่มีวิธีใช้ชิ้นส่วนที่มีอยู่ของSTLและstd::lessทำงานโดยตรงหรือไม่ แก้ไข: ฉันเข้าใจว่าฉันสามารถเขียนฟังก์ชันหรือคลาสแยกกันเพื่อส่งต่อไปยังอาร์กิวเมนต์ที่สามเพื่อจัดเรียง คำถามคือฉันสามารถสร้างมันขึ้นมาจากสิ่งของมาตรฐานได้หรือไม่ ฉันมีบางอย่างที่ดูเหมือน: std::sort(vec.begin(), vec.end(), std::something_magic<int, int, std::less>());
133 c++  stl  stdvector 


18
C ++ สมัยใหม่เป็นที่แพร่หลายมากขึ้นหรือไม่? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ตอนที่ฉันเรียน C ++ ครั้งแรกเมื่อ 6-7 ปีที่แล้วสิ่งที่เรียนโดยพื้นฐานคือ "C with Classes" std::vectorเป็นหัวข้อขั้นสูงอย่างแน่นอนสิ่งที่คุณสามารถเรียนรู้ได้หากคุณต้องการจริงๆ และแน่นอนว่าไม่มีใครบอกฉันว่าผู้ทำลายสามารถถูกควบคุมเพื่อช่วยจัดการความทรงจำ วันนี้ทุกที่ที่ฉันมองเห็น RAII และSFINAEและ STL และ Boost และ Modern C ++ แม้แต่คนที่เพิ่งเริ่มต้นใช้ภาษาก็ดูเหมือนจะได้รับการสอนแนวคิดเหล่านี้เกือบตั้งแต่วันที่ 1 คำถามของฉันคือเป็นเพียงเพราะฉันเห็น "ดีที่สุด" เท่านั้นนั่นคือคำถามที่นี่ใน SO และในไซต์การเขียนโปรแกรมอื่น ๆ ที่มักจะดึงดูดผู้เริ่มต้น (gamedev.net) หรือนี่เป็นตัวแทนของ ชุมชน C ++ โดยรวม? C ++ สมัยใหม่กลายเป็นค่าเริ่มต้นจริงหรือ? แทนที่จะเป็นสิ่งแปลกใหม่ที่ผู้เชี่ยวชาญเขียนถึงมันกลายเป็น "วิธีที่ C …
132 c++ 

6
มาโคร Q_OBJECT ทำอะไร เหตุใดออบเจ็กต์ Qt ทั้งหมดจึงต้องการมาโครนี้
ฉันเพิ่งเริ่มใช้ Qt และสังเกตเห็นว่านิยามคลาสตัวอย่างทั้งหมดมีมาโครQ_OBJECTเป็นบรรทัดแรก จุดประสงค์ของมาโครตัวประมวลผลล่วงหน้านี้คืออะไร?
132 c++  qt  macros 

6
C ++: ทำไมบูลถึงยาว 8 บิต?
ใน C ++ ฉันสงสัยว่าทำไมประเภทบูลถึงมีความยาว 8 บิต (ในระบบของฉัน) ซึ่งมีเพียงบิตเดียวเท่านั้นที่จะเก็บค่าบูลีนได้? ฉันเคยเชื่อว่าเป็นเพราะเหตุผลด้านประสิทธิภาพ แต่ในเครื่อง 32 บิตหรือ 64 บิตที่รีจิสเตอร์กว้าง 32 หรือ 64 บิตข้อดีด้านประสิทธิภาพคืออะไร? หรือเป็นเพียงหนึ่งในเหตุผลทางประวัติศาสตร์เหล่านี้?
132 c++  boolean  size 

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


1
อะไรคือความแตกต่างระหว่าง -std = c ++ 11 และ -std = gnu ++ 11?
อะไรคือความแตกต่างระหว่าง-std=c++11และ-std=gnu++11เป็นพารามิเตอร์การคอมไพล์สำหรับ gcc และ clang? คำถามเดียวกันกับc99และgnu99? ฉันรู้เกี่ยวกับมาตรฐาน C ++ และ C มันคือความแตกต่างของพารามิเตอร์ที่ฉันสนใจ ฉันได้อ่านบางแห่งที่เกี่ยวข้องกับส่วนขยายบางอย่าง แต่ไม่ชัดเจนสำหรับฉันว่าส่วนขยายใดและจะเลือกระหว่างอันใดอันหนึ่งสำหรับโปรเจ็กต์ใหม่
132 c++  gcc  c++11  clang 

11
main () เป็นจุดเริ่มต้นของโปรแกรม C ++ จริงหรือ?
ส่วน $ 3.6.1 / 1 จาก C ++ Standard อ่าน โปรแกรมจะต้องมีฟังก์ชันโกลบอลที่เรียกว่าmainซึ่งเป็นจุดเริ่มต้นของโปรแกรม ลองพิจารณารหัสนี้ int square(int i) { return i*i; } int user_main() { for ( int i = 0 ; i < 10 ; ++i ) std::cout << square(i) << endl; return 0; } int main_ret= user_main(); int main() { return …

4
จะส่งต่อประกาศคลาสเทมเพลตในเนมสเปซ std ได้อย่างไร
#ifndef __TEST__ #define __TEST__ namespace std { template<typename T> class list; } template<typename T> void Pop(std::list<T> * l) { while(!l->empty()) l->pop(); } #endif และใช้ฟังก์ชันนั้นใน main ฉันได้รับข้อผิดพลาด แน่นอนฉันรู้ว่ามีพารามิเตอร์เทมเพลตเพิ่มเติมสำหรับstd::list(ฉันคิดว่าตัวจัดสรร) แต่ที่อยู่ข้างประเด็น ฉันต้องรู้การประกาศเทมเพลตแบบเต็มของคลาสเทมเพลตเพื่อส่งต่อประกาศได้หรือไม่ แก้ไข: ฉันไม่ได้ใช้ตัวชี้มาก่อน - มันเป็นข้อมูลอ้างอิง ฉันจะลองใช้ตัวชี้
131 c++  templates  g++ 

2
ในโหมดเผยแพร่ลักษณะการทำงานของโค้ดไม่เป็นไปตามที่คาดไว้
รหัสต่อไปนี้สร้างผลลัพธ์ที่แตกต่างกันภายใต้โหมดดีบักและโหมดเผยแพร่ (โดยใช้ Visual Studio 2008): int _tmain(int argc, _TCHAR* argv[]) { for( int i = 0; i < 17; i++ ) { int result = i * 16; if( result > 255 ) { result = 255; } printf("i:%2d, result = %3d\n", i, result) ; } return 0; } ผลลัพธ์ของโหมดดีบักซึ่งเป็นไปตามที่คาดไว้: …

9
เหตุใดการใช้ 'ใหม่' จึงทำให้หน่วยความจำรั่ว?
ฉันเรียนรู้ C # ก่อนและตอนนี้ฉันเริ่มต้นด้วย C ++ ตามที่ฉันเข้าใจโอเปอเรเตอร์newใน C ++ ไม่เหมือนกับตัวดำเนินการใน C # คุณสามารถอธิบายสาเหตุของการรั่วไหลของหน่วยความจำในโค้ดตัวอย่างนี้ได้หรือไม่? class A { ... }; struct B { ... }; A *object1 = new A(); B object2 = *(new B());

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