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

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

6
จุดประสงค์ของฟังก์ชั่นเสมือนส่วนตัวที่บริสุทธิ์คืออะไร?
ฉันเจอรหัสต่อไปนี้ในไฟล์ส่วนหัว: class Engine { public: void SetState( int var, bool val ); { SetStateBool( int var, bool val ); } void SetState( int var, int val ); { SetStateInt( int var, int val ); } private: virtual void SetStateBool(int var, bool val ) = 0; virtual void SetStateInt(int var, int …

4
เหตุใดฉันจึงใช้รถยนต์เป็นประเภทส่วนตัว
ฉันรู้สึกประหลาดใจอย่างยิ่งที่โค้ดต่อไปนี้รวบรวมและทำงาน (vc2012 & gcc4.7.2) class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; // Foo::Bar b = f.Baz(); // error auto b = f.Baz(); // ok std::cout << b.i; } ถูกต้องหรือไม่ว่ารหัสนี้รวบรวมได้ดี และทำไมมันถูกต้อง? เหตุใดฉันสามารถใช้autoกับประเภทส่วนตัวในขณะที่ฉันไม่สามารถใช้ชื่อได้ (ตามที่คาดไว้)

3
C ++ ยังคงมีประสิทธิภาพอยู่หรือไม่?
จากสิ่งที่ผมเห็นในโพสต์นี้ฉันตัดสินใจที่จะเริ่มต้นการอ่านหนังสือเล่มนี้มีผลบังคับใช้ C ++ แต่ตอนนี้มีคุณสมบัติใหม่มากมายเนื่องจาก C ++ 11 และแนวทางปฏิบัติที่ดีบางอย่างเปลี่ยนไปฉันไม่แน่ใจว่าจริง ๆ แล้วมันเป็นความคิดที่ดีหรือไม่ การถือกำเนิดของ C ++ 11 ถูกคัดค้านคำแนะนำใด ๆ ที่มีอยู่ใน Effective C ++ หรือไม่? ถ้าเป็นเช่นนั้นฉันควรหลีกเลี่ยงหัวข้อใด

2
CMake: โครงสร้างโครงการพร้อมการทดสอบหน่วย
ฉันกำลังพยายามจัดโครงสร้างโครงการของฉันเพื่อรวมแหล่งผลิต (ในsrcโฟลเดอร์ย่อย) และการทดสอบ (ในtestโฟลเดอร์ย่อย) ฉันใช้ CMake เพื่อสร้างสิ่งนี้ ตัวอย่างเล็ก ๆ น้อย ๆ ฉันมีไฟล์ต่อไปนี้: CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (TEST) add_subdirectory (src) add_subdirectory (test) src / CMakeLists.txt: add_executable (demo main.cpp sqr.cpp) src / sqr.h #ifndef SQR_H #define SQR_H double sqr(double); #endif // SQR_H src / sqr.cpp #include "sqr.h" double sqr(double x) { …

1
C ++: ตัวแปร 'std :: ifstream ifs' มี initializer แต่เป็นประเภทที่ไม่สมบูรณ์
ขออภัยถ้านี่ไม่ใช่เสียงค่อนข้างสวย แต่ฉันค่อนข้างใหม่กับ C ++ ฉันพยายามเปิดไฟล์และอ่านโดยใช้ifstream: vector<string> load_f(string file) { vector<string> text; ifstream ifs(file); string buffer, str_line; int brackets = 0; str_line = ""; while ( getline(ifs, buffer) ) { buffer = Trim( buffer ); size_t s = buffer.find_first_of("()"); if (s == string::npos) str_line += "" + buffer; else { while …
139 c++  fstream  return-type 


5
หมุนจุดเกี่ยวกับจุดอื่น (2D)
ฉันกำลังพยายามสร้างเกมไพ่ที่การ์ดจะเปิดออก ตอนนี้เพื่อแสดงมันโดยใช้ Allegro API ซึ่งมีฟังก์ชั่น: al_draw_rotated_bitmap(OBJECT_TO_ROTATE,CENTER_X,CENTER_Y,X ,Y,DEGREES_TO_ROTATE_IN_RADIANS); ดังนั้นด้วยสิ่งนี้ฉันสามารถทำให้เอฟเฟกต์แฟน ๆ ของฉันง่ายขึ้น ปัญหาคือรู้ว่าการ์ดใดอยู่ภายใต้เมาส์ เมื่อต้องการทำสิ่งนี้ฉันคิดถึงการทดสอบการชนกันของรูปหลายเหลี่ยม ฉันไม่แน่ใจว่าจะหมุน 4 จุดบนการ์ดเพื่อสร้างรูปหลายเหลี่ยมได้อย่างไร โดยทั่วไปฉันต้องดำเนินการเช่นเดียวกับ Allegro ตัวอย่างเช่น 4 คะแนนของการ์ดคือ: card.x card.y card.x + card.width card.y + card.height ฉันต้องการฟังก์ชั่นเช่น: POINT rotate_point(float cx,float cy,float angle,POINT p) { } ขอบคุณ
139 c++  algorithm 

8
ไม่สามารถเปิดไฟล์รวม 'afxres.h' ใน VC2010 Express
ฉันพยายามรวบรวมโปรเจ็กต์เก่าโดยใช้ VS express 2010 แต่ฉันได้รับข้อผิดพลาดนี้: ข้อผิดพลาดร้ายแรง RC1015: ไม่สามารถเปิดรวมไฟล์ 'afxres.h' จากรหัสนี้ ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ฉันติดตั้ง Windows SDK แล้ว แต่ไม่ประสบความสำเร็จ ขอบคุณ!

6
ฉันจะระบุตัวชี้ไปยังฟังก์ชันที่โอเวอร์โหลดได้อย่างไร
ฉันต้องการส่งผ่านฟังก์ชันที่มากเกินไปไปยังstd::for_each()อัลกอริทึม ตัวอย่างเช่น, class A { void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } }; ฉันคาดหวังว่าคอมไพลเลอร์จะแก้ไขf()ตามประเภทตัววนซ้ำ เห็นได้ชัดว่ามัน (GCC 4.1.2) ไม่ได้ทำ ฉันจะระบุสิ่งที่f()ฉันต้องการได้อย่างไร?
139 c++  stl 

2
ฉันจะทำอย่างไรกับวัตถุที่ถูกย้ายจาก?
มาตรฐานกำหนดสิ่งที่ฉันสามารถทำกับวัตถุได้อย่างแม่นยำเมื่อมันถูกย้ายจากหรือไม่? ฉันเคยคิดว่าทุกสิ่งที่คุณสามารถทำได้ด้วยวัตถุที่ย้ายจากไปนั้นทำลายมัน แต่นั่นก็ไม่เพียงพอ ตัวอย่างเช่นใช้เทมเพลตฟังก์ชันswapตามที่กำหนดไว้ในไลบรารีมาตรฐาน: template <typename T> void swap(T& a, T& b) { T c = std::move(a); // line 1 a = std::move(b); // line 2: assignment to moved-from object! b = std::move(c); // line 3: assignment to moved-from object! } เห็นได้ชัดว่ามันจะต้องเป็นไปได้ที่จะกำหนดให้กับการย้ายจากวัตถุมิฉะนั้นบรรทัดที่ 2 และ 3 จะล้มเหลว แล้วฉันจะทำยังไงกับวัตถุที่ถูกย้าย? ฉันจะหารายละเอียดเหล่านี้ได้จากที่ไหน? (อย่างไรก็ตามทำไมมันT c …

10
ฉันควรเลือกพอยน์เตอร์หรือการอ้างอิงในข้อมูลสมาชิกหรือไม่?
นี่เป็นตัวอย่างง่าย ๆ เพื่อแสดงคำถาม: class A {}; class B { B(A& a) : a(a) {} A& a; }; class C { C() : b(a) {} A a; B b; }; ดังนั้น B เป็นผู้รับผิดชอบสำหรับการปรับปรุงส่วนหนึ่งของซีฉันวิ่งรหัสผ่านผ้าสำลีและมัน whinged เกี่ยวกับสมาชิกในการอ้างอิง: ผ้าสำลี # 1725 การพูดคุยเกี่ยวกับการดูแลการคัดลอกและการมอบหมายเริ่มต้นที่ยุติธรรมพอ แต่การคัดลอกและการมอบหมายเริ่มต้นก็ไม่ดีสำหรับพอยน์เตอร์ดังนั้นจึงมีข้อได้เปรียบเล็กน้อย ฉันมักจะพยายามใช้การอ้างอิงที่ฉันสามารถทำได้เนื่องจากพอยน์เตอร์พอยน์เตอร์แนะนำความไม่แน่นอนเกี่ยวกับผู้ที่รับผิดชอบในการลบตัวชี้นั้น ฉันชอบที่จะฝังวัตถุตามค่า แต่ถ้าฉันต้องการตัวชี้ฉันใช้ auto_ptr ในข้อมูลสมาชิกของคลาสที่เป็นเจ้าของตัวชี้และส่งวัตถุไปรอบ ๆ เพื่ออ้างอิง ฉันมักจะใช้ตัวชี้ในข้อมูลสมาชิกเท่านั้นเมื่อตัวชี้อาจเป็นโมฆะหรือสามารถเปลี่ยนแปลงได้ มีเหตุผลอื่นอีกไหมที่จะชอบพอยน์เตอร์มากกว่าการอ้างอิงสำหรับสมาชิกข้อมูล เป็นความจริงหรือไม่ที่จะบอกว่าวัตถุที่มีการอ้างอิงไม่ควรกำหนดได้เนื่องจากการอ้างอิงไม่ควรเปลี่ยนเมื่อเริ่มต้น?

2
ทำไมการจัดสรรเริ่มต้น C ++ จึงมีขนาดใหญ่กว่า C มาก?
เมื่อใช้รหัสเดียวกันการเปลี่ยนคอมไพเลอร์ (จากคอมไพเลอร์ C เป็นคอมไพเลอร์ C ++) จะเปลี่ยนจำนวนหน่วยความจำที่จัดสรร ฉันไม่แน่ใจว่าทำไมถึงเป็นเช่นนี้และต้องการที่จะเข้าใจมากกว่านี้ จนถึงการตอบสนองที่ดีที่สุดที่ฉันได้รับคือ "อาจเป็นสตรีม I / O" ซึ่งไม่ได้อธิบายมากและทำให้ฉันสงสัยเกี่ยวกับ "คุณไม่จ่ายเงินสำหรับสิ่งที่คุณไม่ได้ใช้" แง่มุมของ C ++ ฉันใช้คอมไพเลอร์ Clang และ GCC เวอร์ชัน 7.0.1-8 และ 8.3.0-6 ตามลำดับ ระบบของฉันทำงานบน Debian 10 (Buster) เวอร์ชันล่าสุด มาตรฐานจะทำผ่าน Valgrind Massif #include <stdio.h> int main() { printf("Hello, world!\n"); return 0; } รหัสที่ใช้ไม่เปลี่ยนแปลง แต่ไม่ว่าฉันจะคอมไพล์เป็น C หรือเป็น C …
138 c++  c  benchmarking 

13
มันเป็นไปได้ที่จะทำให้เป็นอันดับและ deserialize ชั้นใน C + +?
มันเป็นไปได้ที่จะทำให้เป็นอันดับและ deserialize ชั้นใน C + +? ฉันใช้ Java มา 3 ปีแล้วและการซีเรียลไลซ์เซชั่น / ดีซีเรียลไลเซชันเป็นเรื่องเล็กน้อยในภาษานั้น C ++ มีคุณสมบัติที่คล้ายกันหรือไม่ มีไลบรารีดั้งเดิมที่จัดการการทำให้เป็นอันดับหรือไม่ ตัวอย่างจะเป็นประโยชน์
138 c++  serialization 

13
เหตุใด C ++ จึงต้องการไฟล์ส่วนหัวแยกต่างหาก
ฉันไม่เคยเข้าใจเลยว่าทำไม C ++ จึงต้องการไฟล์ส่วนหัวแยกต่างหากซึ่งมีฟังก์ชั่นเดียวกับในไฟล์. cpp มันทำให้การสร้างคลาสและการปรับโครงสร้างใหม่นั้นยากมากและจะเพิ่มไฟล์ที่ไม่จำเป็นให้กับโครงการ แล้วมีปัญหากับการรวมไฟล์ส่วนหัว แต่ต้องตรวจสอบอย่างชัดเจนว่าได้รวมอยู่แล้วหรือไม่ C ++ ได้รับการให้สัตยาบันในปี 1998 ดังนั้นทำไมมันจึงออกแบบวิธีนี้ ข้อดีของการมีไฟล์ส่วนหัวแยกกันคืออะไร ติดตามคำถาม: คอมไพเลอร์หาไฟล์. cpp ด้วยรหัสในวิธีใดเมื่อฉันรวมเป็นไฟล์. h มันสันนิษฐานว่าไฟล์. cpp มีชื่อเดียวกันกับไฟล์. h หรือไม่จริง ๆ แล้วค้นหาไฟล์ทั้งหมดในแผนผังไดเรกทอรีหรือไม่

11
การวัดเวลาดำเนินการของฟังก์ชันใน C ++
ฉันต้องการที่จะหาวิธีการมากเวลาฟังก์ชั่นบางอย่างต้องใช้เวลาในการฉัน C ++ โปรแกรมที่จะรันบนลินุกซ์ หลังจากนั้นฉันต้องการเปรียบเทียบความเร็ว ฉันเห็นฟังก์ชั่นหลายครั้ง แต่จบลงด้วยสิ่งนี้จากการเพิ่ม Chrono: process_user_cpu_clock, captures user-CPU time spent by the current process ตอนนี้ฉันยังไม่ชัดเจนถ้าฉันใช้ฟังก์ชั่นด้านบนฉันจะได้รับเฉพาะซีพียูที่ใช้ในฟังก์ชั่นนั้นหรือไม่ ประการที่สองฉันไม่พบตัวอย่างการใช้ฟังก์ชั่นด้านบน คนใดคนหนึ่งโปรดช่วยฉันวิธีการใช้ฟังก์ชั่นดังกล่าวข้างต้น? PS: ตอนนี้ฉันใช้std::chrono::system_clock::now()เพื่อรับเวลาในไม่กี่วินาที แต่สิ่งนี้ทำให้ฉันผลลัพธ์ที่แตกต่างเนื่องจากการโหลด CPU ที่แตกต่างกันทุกครั้ง

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