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

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

6
ย้ายตัวดำเนินการกำหนดและ "if (this! = & rhs)"
ในตัวดำเนินการมอบหมายของคลาสคุณมักจะต้องตรวจสอบว่าออบเจ็กต์ที่ถูกกำหนดเป็นอ็อบเจกต์ที่เรียกใช้หรือไม่เพื่อที่คุณจะได้ไม่พลาด: Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } คุณต้องการสิ่งเดียวกันสำหรับตัวดำเนินการมอบหมายการย้ายหรือไม่? เคยมีสถานการณ์ที่this == &rhsจะเป็นจริงหรือไม่? ? Class::operator=(Class&& rhs) { ? }

5
เหตุใด Cout จึงพิมพ์“ 2 + 3 = 15” ในข้อมูลโค้ดนี้
เหตุใดผลลัพธ์ของโปรแกรมด้านล่างจึงเป็นอย่างไร #include <iostream> using namespace std; int main(){ cout << "2+3 = " << cout << 2 + 3 << endl; } ผลิต 2+3 = 15 แทนที่จะเป็นที่คาดหวัง 2+3 = 5 คำถามนี้มีรอบการปิด / เปิดใหม่หลายรอบแล้ว ก่อนที่จะปิดโหวตโปรดพิจารณาการอภิปรายเมตาเกี่ยวกับปัญหานี้
126 c++ 

9
การ push_back องค์ประกอบจากเวกเตอร์เดียวกันปลอดภัยหรือไม่
vector<int> v; v.push_back(1); v.push_back(v[0]); หาก push_back ครั้งที่สองทำให้เกิดการจัดสรรใหม่การอ้างอิงถึงจำนวนเต็มแรกในเวกเตอร์จะใช้ไม่ได้อีกต่อไป อย่างนี้ไม่ปลอดภัยเหรอ? vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]); สิ่งนี้ทำให้ปลอดภัย?

7
ความแตกต่างระหว่างประเภทสตริงและ char [] ใน C ++
ฉันรู้ C นิดหน่อยและตอนนี้ฉันกำลังดู C ++ ฉันเคยใช้ถ่านอาร์เรย์สำหรับจัดการกับสตริง C แต่ในขณะที่ฉันดูรหัส C ++ ฉันเห็นมีตัวอย่างที่ใช้ทั้งประเภทสตริงและอาร์เรย์ถ่าน: #include <iostream> #include <string> using namespace std; int main () { string mystr; cout << "What's your name? "; getline (cin, mystr); cout << "Hello " << mystr << ".\n"; cout << "What is your favorite team? "; getline …
126 c++  string  types 

12
การใช้ scanf () ในโปรแกรม C ++ จะเร็วกว่าการใช้ cin?
ฉันไม่รู้ว่าเป็นเรื่องจริงหรือเปล่า แต่เมื่อฉันอ่านคำถามที่พบบ่อยเกี่ยวกับปัญหาหนึ่งในการจัดหาเว็บไซต์ฉันพบบางอย่างที่กระตุ้นความสนใจของฉัน: ตรวจสอบวิธีอินพุต / เอาต์พุตของคุณ ใน C ++ การใช้ cin และ cout ช้าเกินไป ใช้สิ่งเหล่านี้และคุณจะรับประกันว่าจะไม่สามารถแก้ไขปัญหาใด ๆ ด้วยอินพุตหรือเอาต์พุตในปริมาณที่เหมาะสม ใช้ printf และ scanf แทน ใครช่วยชี้แจงเรื่องนี้ได้ไหม การใช้scanf ()ในโปรแกรม C ++ เร็วกว่าการใช้cin >> บางอย่างหรือไม่? ถ้าใช่การใช้งานในโปรแกรม C ++ เป็นวิธีปฏิบัติที่ดีหรือไม่? ฉันคิดว่ามันเป็นภาษา C เฉพาะแม้ว่าฉันจะเพิ่งเรียนรู้ C ++ ...
126 c++  c  performance  io 




5
วิธีเสมือนส่วนตัวใน C ++
ข้อดีของการสร้างเมธอดส่วนตัวเสมือนใน C ++ คืออะไร? ฉันสังเกตเห็นสิ่งนี้ในโครงการ C ++ โอเพ่นซอร์ส: class HTMLDocument : public Document, public CachedResourceClient { private: virtual bool childAllowed(Node*); virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&); };


3
วิธีเรียกใช้กรณีทดสอบเฉพาะใน GoogleTest
ฉันกำลังพยายามเขียนฟังก์ชัน / วิธีการสำหรับโครงการของฉันซึ่งจะถามผู้ใช้ว่าคุณจะเรียกใช้กรณีทดสอบใดทั้งหมด ดูเหมือนด้านล่าง ... , Test_Cases_1 |_TestNo1 |_TestNo2....so on Test_Cases_2 |_TestNo1 |_TestNo2....so on .... ....so on Test_Cases_N |_TestNo1 |_TestNo2....so on ดังนั้นตอนนี้ความท้าทายคือในขณะที่ดำเนินโครงการควรแจ้งให้ฉันทราบว่าคุณต้องการดำเนินการทดสอบกรณีใดบ้าง ถ้าฉันเลือกTest_Cases_1และTest_Cases_N. แล้วมันควรจะดำเนินการทั้งสองกรณีทดสอบและควรแยกอื่น ๆ Test_Cases_2 to ....ทั้งหมดจาก ในหน้าต่างผลผมก็อยากจะเห็นผลของการและTest_Cases_1Test_Cases_N ดังนั้นถ้าฉันจะดู GoogleTest มีวิธีที่เรียกว่าtest_case_to_run_count(); แต่ทั้งหมดtest casesได้รับการลงทะเบียนด้วยวิธี Test_F () ดังนั้นฉันจึงทำการวิเคราะห์มากมาย แต่ก็ยังไม่พบวิธีแก้ปัญหาใด ๆ โปรดช่วยฉันด้วย

15
ฟังก์ชันและประสิทธิภาพเสมือนจริง - C ++
ในการออกแบบชั้นเรียนของฉันฉันใช้คลาสนามธรรมและฟังก์ชันเสมือนอย่างกว้างขวาง ฉันรู้สึกว่าฟังก์ชันเสมือนมีผลต่อประสิทธิภาพ นี่คือเรื่องจริง? แต่ฉันคิดว่าความแตกต่างของประสิทธิภาพนี้ไม่สามารถสังเกตเห็นได้และดูเหมือนว่าฉันกำลังทำการเพิ่มประสิทธิภาพก่อนกำหนด ขวา?

29
คุณตรวจจับ / หลีกเลี่ยงการรั่วไหลของหน่วยความจำในรหัส (ไม่มีการจัดการ) ของคุณได้อย่างไร? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ในโค้ด C / C ++ ที่ไม่มีการจัดการแนวทางปฏิบัติที่ดีที่สุดในการตรวจจับการรั่วไหลของหน่วยความจำคืออะไร? และแนวทางการเข้ารหัสเพื่อหลีกเลี่ยง? (ราวกับว่ามันง่ายมาก) เราเคยใช้วิธีโง่ ๆ ในอดีต: มีการเพิ่มตัวนับสำหรับการเรียกจัดสรรหน่วยความจำทุกครั้งและลดลงในขณะที่ว่าง ในตอนท้ายของโปรแกรมค่าตัวนับควรเป็นศูนย์ ฉันรู้ว่านี่ไม่ใช่วิธีที่ดีและมีการจับไม่กี่ครั้ง (ตัวอย่างเช่นหากคุณกำลังเพิ่มหน่วยความจำที่จัดสรรโดยการเรียก API ของแพลตฟอร์มจำนวนการจัดสรรของคุณจะไม่ตรงกับจำนวนการว่างของคุณแน่นอนจากนั้นเราจะเพิ่มตัวนับเมื่อเรียกการเรียก API ที่จัดสรรหน่วยความจำ) ฉันคาดหวังว่าประสบการณ์คำแนะนำของคุณและอาจมีการอ้างอิงถึงเครื่องมือที่ทำให้สิ่งนี้ง่ายขึ้น
125 c++  c  memory-leaks 

15
ฉันควรใช้ #define, enum หรือ const?
ในโปรเจ็กต์ C ++ ที่ฉันกำลังทำอยู่ฉันมีค่าแฟล็กซึ่งสามารถมีได้สี่ค่า ธงทั้งสี่นี้สามารถรวมกันได้ แฟล็กอธิบายถึงเร็กคอร์ดในฐานข้อมูลและสามารถ: สถิติใหม่ ลบบันทึก แก้ไขบันทึก บันทึกที่มีอยู่ ตอนนี้สำหรับแต่ละระเบียนฉันต้องการเก็บแอตทริบิวต์นี้ไว้ดังนั้นฉันจึงสามารถใช้ enum: enum { xNew, xDeleted, xModified, xExisting } อย่างไรก็ตามในที่อื่น ๆ ในโค้ดฉันจำเป็นต้องเลือกว่าจะให้ผู้ใช้มองเห็นเรกคอร์ดใดได้บ้างดังนั้นฉันจึงต้องการส่งผ่านข้อมูลนั้นเป็นพารามิเตอร์เดียวเช่น: showRecords(xNew | xDeleted); ดูเหมือนว่าฉันจะมี appoaches ที่เป็นไปได้สามอย่าง: #define X_NEW 0x01 #define X_DELETED 0x02 #define X_MODIFIED 0x04 #define X_EXISTING 0x08 หรือ typedef enum { xNew = 1, xDeleted, xModified = …

2
เหตุใด Clang จึงเพิ่มประสิทธิภาพออกไป x * 1.0 แต่ไม่ใช่ x + 0.0
เหตุใด Clang จึงเพิ่มประสิทธิภาพการวนซ้ำในโค้ดนี้ #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", …

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