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

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

8
แนะนำที่ดีที่สุดสำหรับการเขียนโปรแกรมแม่แบบ C ++? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ Static metaprogramming (aka "template metaprogramming") เป็นเทคนิค C ++ ที่ยอดเยี่ยมที่ช่วยให้สามารถเรียกใช้โปรแกรมได้ในเวลาคอมไพล์ หลอดไฟดับลงในหัวของฉันทันทีที่ฉันอ่านตัวอย่างการเขียนโปรแกรมเมตาแบบบัญญัตินี้: #include <iostream> using namespace std; template< int n > struct factorial { enum { ret = factorial< n - 1 >::ret * n }; }; template<> struct factorial< 0 > …

4
cout ซิงโครไนซ์ / เธรดปลอดภัยหรือไม่?
โดยทั่วไปฉันถือว่าสตรีมไม่ซิงโครไนซ์ขึ้นอยู่กับผู้ใช้ที่จะทำการล็อกที่เหมาะสม อย่างไรก็ตามสิ่งต่างๆเช่นcoutได้รับการดูแลเป็นพิเศษในไลบรารีมาตรฐานหรือไม่ นั่นคือถ้าหลายเธรดเขียนไปcoutพวกเขาสามารถทำให้coutวัตถุเสียหายได้หรือไม่? ฉันเข้าใจดีว่าแม้ว่าจะซิงโครไนซ์แล้วคุณจะยังคงได้รับเอาต์พุตแบบสอดแทรกแบบสุ่ม แต่รับประกันการแทรกสอด นั่นคือปลอดภัยที่จะใช้coutจากหลายเธรดหรือไม่? ขึ้นอยู่กับผู้ขายรายนี้หรือไม่? gcc ทำอะไร? สำคัญ : โปรดระบุข้อมูลอ้างอิงสำหรับคำตอบของคุณหากคุณตอบว่า "ใช่" เนื่องจากฉันต้องการหลักฐานบางอย่างเกี่ยวกับเรื่องนี้ ข้อกังวลของฉันไม่ได้เกี่ยวกับการเรียกระบบพื้นฐานซึ่งเป็นสิ่งที่ดี แต่สตรีมเพิ่มชั้นของการบัฟเฟอร์ที่ด้านบน
112 c++  gcc  c++11 

8
การเพิ่มไลบรารีภายนอกในโครงการ Qt Creator
ฉันจะเพิ่มไลบรารีภายนอกลงในโปรเจ็กต์ที่สร้างโดย Qt Creator RC1 (เวอร์ชัน 0.9.2) ได้อย่างไร ตัวอย่างเช่นEnumProcesses()ต้องPsapi.libเพิ่มฟังก์ชัน win32 ในโปรเจ็กต์เพื่อสร้าง
112 c++  winapi  qt  qt-creator 

9
เหตุใดจึงส่งคืนค่าที่ไม่ได้ใช้ให้เป็นโมฆะ
int fn(); void whatever() { (void) fn(); } มีเหตุผลใดที่ทำให้ค่าตอบแทนที่ไม่ได้ใช้กลายเป็นโมฆะหรือฉันคิดถูกแล้วที่คิดว่ามันเสียเวลาไปเปล่า ๆ ? ติดตาม: ดูเหมือนว่าจะค่อนข้างครอบคลุม ฉันคิดว่าดีกว่าการแสดงความคิดเห็นเกี่ยวกับค่าส่งคืนที่ไม่ได้ใช้เนื่องจากรหัสการจัดทำเอกสารด้วยตนเองดีกว่าความคิดเห็น โดยส่วนตัวฉันจะปิดคำเตือนเหล่านี้เนื่องจากเป็นเสียงที่ไม่จำเป็น ฉันจะกินคำพูดของฉันถ้าแมลงหนีเพราะมัน ...
112 c++  c  void 

6
ยกเลิกยุติหรือออก?
อะไรคือความแตกต่างระหว่างทั้งสามและฉันจะยุติโปรแกรมได้อย่างไรในกรณีที่มีข้อยกเว้นที่ฉันไม่สามารถจัดการได้อย่างเหมาะสม
112 c++ 

19
#ifdef vs #if - วิธีใดดีกว่า / ปลอดภัยกว่าสำหรับวิธีการเปิด / ปิดการรวบรวมโค้ดบางส่วน
นี่อาจเป็นเรื่องของรูปแบบ แต่มีความแตกแยกเล็กน้อยในทีม dev ของเราและฉันสงสัยว่ามีใครมีความคิดเกี่ยวกับเรื่องนี้บ้าง ... โดยทั่วไปเรามีคำสั่งพิมพ์ดีบักซึ่งเราปิดในระหว่างการพัฒนาตามปกติ โดยส่วนตัวแล้วฉันชอบทำสิ่งต่อไปนี้: //---- SomeSourceFile.cpp ---- #define DEBUG_ENABLED (0) ... SomeFunction() { int someVariable = 5; #if(DEBUG_ENABLED) printf("Debugging: someVariable == %d", someVariable); #endif } บางทีมชอบสิ่งต่อไปนี้: // #define DEBUG_ENABLED ... SomeFunction() { int someVariable = 5; #ifdef DEBUG_ENABLED printf("Debugging: someVariable == %d", someVariable); #endif } ... วิธีใดที่เหมาะกับคุณมากกว่าและเพราะเหตุใด …



10
จะหลีกเลี่ยง if / else if chain ได้อย่างไรเมื่อจำแนกหัวเรื่องออกเป็น 8 ทิศทาง?
ฉันมีรหัสต่อไปนี้: if (this->_car.getAbsoluteAngle() <= 30 || this->_car.getAbsoluteAngle() >= 330) this->_car.edir = Car::EDirection::RIGHT; else if (this->_car.getAbsoluteAngle() > 30 && this->_car.getAbsoluteAngle() <= 60) this->_car.edir = Car::EDirection::UP_RIGHT; else if (this->_car.getAbsoluteAngle() > 60 && this->_car.getAbsoluteAngle() <= 120) this->_car.edir = Car::EDirection::UP; else if (this->_car.getAbsoluteAngle() > 120 && this->_car.getAbsoluteAngle() <= 150) this->_car.edir = Car::EDirection::UP_LEFT; else if …
111 c++  if-statement 

9
วิธีแปลง std :: string เป็น LPCSTR
ฉันสามารถแปลงstd::stringไปLPCSTR? นอกจากนี้วิธีการที่ฉันสามารถแปลงstd::stringไปLPWSTR? ฉันสับสนกับสิ่งเหล่านี้LPCSTR LPSTR LPWSTRและLPCWSTR. เป็นLPWSTRและLPCWSTRเหมือนกันหรือไม่?
111 c++  windows  string 

13
ฉันจะหลีกเลี่ยง "for" ลูปที่มีเงื่อนไข "if" ภายในด้วย C ++ ได้อย่างไร
ด้วยโค้ดเกือบทั้งหมดที่ฉันเขียนฉันมักจะจัดการกับปัญหาการลดการตั้งค่าในคอลเลกชั่นที่ท้ายที่สุดแล้วมีเงื่อนไข "if" ที่ไร้เดียงสาอยู่ภายใน นี่คือตัวอย่างง่ายๆ: for(int i=0; i<myCollection.size(); i++) { if (myCollection[i] == SOMETHING) { DoStuff(); } } ด้วยภาษาที่ใช้งานได้ฉันสามารถแก้ปัญหาได้โดยการลดคอลเล็กชันลงในคอลเล็กชันอื่น (อย่างง่ายดาย) จากนั้นดำเนินการทั้งหมดกับชุดที่ลดลงของฉัน ใน pseudocode: newCollection <- myCollection where <x=true map DoStuff newCollection และในรูปแบบ C อื่น ๆ เช่น C # ฉันสามารถลดด้วย where clause like foreach (var x in myCollection.Where(c=> c == SOMETHING)) { …
111 c++  c++11  c++14 

9
เรียกเมธอด Objective-C จากฟังก์ชันสมาชิก C ++?
ฉันมีคลาส ( EAGLView) ซึ่งเรียกใช้ฟังก์ชันสมาชิกของC++คลาสโดยไม่มีปัญหา ตอนนี้ปัญหาคือฉันต้องเรียกในC++คลาสobjective-C function [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];นั้นซึ่งฉันไม่สามารถทำได้ในC++รูปแบบไวยากรณ์ ฉันสามารถตัดการObjective-Cเรียกนี้เป็นObjective-Cคลาสเดียวกันซึ่งในตอนแรกเรียกว่าคลาส C ++ แต่ฉันต้องเรียกวิธีนั้นจากวิธีC++ใดและฉันไม่สามารถหาวิธีการได้ ฉันพยายามให้ตัวชี้EAGLViewคัดค้านฟังก์ชันสมาชิก C ++ และรวม " EAGLView.h" ไว้ในC++ส่วนหัวของคลาส แต่ฉันพบข้อผิดพลาด 3999 .. แล้ว.. จะทำอย่างไรดี? ตัวอย่างจะดี .. ฉันพบเพียงCตัวอย่างที่บริสุทธิ์ของการทำเช่นนี้
111 c++  objective-c 

16
C ++: ขนาดของวัตถุของคลาสว่างคืออะไร?
ฉันสงสัยว่าอะไรจะมีขนาดเท่าออบเจ็กต์ของคลาสว่างได้ มันไม่สามารถแน่นอนสามารถเป็น 0 ไบต์ได้เนื่องจากมันควรจะเป็นไปได้ที่จะอ้างอิงและชี้ไปที่มันเหมือนกับวัตถุอื่น ๆ แต่วัตถุดังกล่าวใหญ่แค่ไหน? ฉันใช้โปรแกรมขนาดเล็กนี้: #include <iostream> using namespace std; class Empty {}; int main() { Empty e; cerr << sizeof(e) << endl; return 0; } ผลลัพธ์ที่ฉันได้รับจากคอมไพเลอร์ Visual C ++ และ Cygwin-g ++ คือ1 ไบต์ ! นี่เป็นเรื่องที่น่าแปลกใจเล็กน้อยสำหรับฉันเนื่องจากฉันคาดหวังว่ามันจะมีขนาดเท่ากับคำว่าเครื่อง (32 บิตหรือ 4 ไบต์) ใครช่วยอธิบายได้ไหมว่าทำไมขนาด 1 ไบต์? ทำไมไม่ 4 ไบต์? ขึ้นอยู่กับคอมไพเลอร์หรือเครื่องด้วยหรือเปล่า? …
111 c++  class  object 

7
บังคับใช้คำสั่งคำสั่งใน C ++
สมมติว่าฉันมีคำสั่งจำนวนหนึ่งที่ฉันต้องการดำเนินการตามลำดับคงที่ ฉันต้องการใช้ g ++ กับการเพิ่มประสิทธิภาพระดับ 2 ดังนั้นจึงสามารถจัดเรียงคำสั่งใหม่ได้ มีเครื่องมืออะไรบ้างในการบังคับใช้คำสั่งบางอย่าง ลองพิจารณาตัวอย่างต่อไปนี้ using Clock = std::chrono::high_resolution_clock; auto t1 = Clock::now(); // Statement 1 foo(); // Statement 2 auto t2 = Clock::now(); // Statement 3 auto elapsedTime = t2 - t1; ในตัวอย่างนี้เป็นสิ่งสำคัญที่จะต้องดำเนินการคำสั่ง 1-3 ตามลำดับที่กำหนด อย่างไรก็ตามคอมไพเลอร์ไม่สามารถคิดว่าคำสั่ง 2 เป็นอิสระจาก 1 และ 3 และรันโค้ดดังนี้ได้หรือไม่? using Clock=std::chrono::high_resolution_clock; foo(); …

3
อาร์เรย์เทียบกับเวกเตอร์: ความคล้ายคลึงและความแตกต่างเบื้องต้น [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา อะไรคือความแตกต่างระหว่างอาร์เรย์และเวกเตอร์ใน C ++? ตัวอย่างของความแตกต่างอาจรวมถึงไลบรารีสัญลักษณ์ความสามารถ ฯลฯ อาร์เรย์ อาร์เรย์ประกอบด้วยองค์ประกอบจำนวนเฉพาะของประเภทหนึ่ง ๆ เพื่อให้คอมไพลเลอร์สามารถสงวนพื้นที่ตามที่ต้องการเมื่อคอมไพล์โปรแกรมคุณต้องระบุประเภทและจำนวนองค์ประกอบที่อาร์เรย์จะมีเมื่อมีการกำหนด คอมไพเลอร์ต้องสามารถกำหนดค่านี้ได้เมื่อโปรแกรมถูกคอมไพล์ เมื่อกำหนดอาร์เรย์แล้วคุณจะใช้ตัวระบุสำหรับอาร์เรย์พร้อมกับดัชนีเพื่อเข้าถึงองค์ประกอบเฉพาะของอาร์เรย์ [... ] อาร์เรย์เป็นศูนย์ดัชนี นั่นคือองค์ประกอบแรกอยู่ที่ดัชนี 0 รูปแบบการจัดทำดัชนีนี้บ่งบอกถึงความสัมพันธ์ที่ใกล้ชิดใน C ++ ระหว่างพอยน์เตอร์และอาร์เรย์และกฎที่ภาษากำหนดสำหรับการคำนวณทางคณิตศาสตร์ของตัวชี้ - การอ้างอิงกระเป๋า C ++ เวกเตอร์ เวกเตอร์คือลำดับขนาดแบบไดนามิกของวัตถุที่ให้operator[]การเข้าถึงแบบสุ่มสไตล์อาร์เรย์ ฟังก์ชันสมาชิกpush_backคัดลอกอาร์กิวเมนต์ผ่านตัวสร้างการคัดลอกเพิ่มสำเนานั้นเป็นรายการสุดท้ายในเวกเตอร์และเพิ่มขนาดทีละรายการpop_backตรงข้ามกันโดยเอาองค์ประกอบสุดท้ายออก การแทรกหรือลบรายการจากจุดสิ้นสุดของเวกเตอร์จะใช้เวลาคงที่ในการตัดจำหน่ายและการแทรกหรือลบจากตำแหน่งอื่นต้องใช้เวลาเชิงเส้น นี่คือพื้นฐานของเวกเตอร์ ยังมีอีกมากสำหรับพวกเขา ในกรณีส่วนใหญ่เวกเตอร์ควรเป็นตัวเลือกแรกของคุณในอาร์เรย์สไตล์ C ก่อนอื่นพวกมันมีขนาดแบบไดนามิกซึ่งหมายความว่าพวกมันสามารถเติบโตได้ตามต้องการ คุณไม่จำเป็นต้องทำการวิจัยทุกประเภทเพื่อหาขนาดคงที่ที่เหมาะสมเช่นในกรณีของอาร์เรย์ C เวกเตอร์จะเติบโตขึ้นตามต้องการและสามารถปรับขนาดให้ใหญ่ขึ้นหรือเล็กลงได้ด้วยตนเองหากคุณต้องการ ประการที่สองเวกเตอร์เสนอการตรวจสอบขอบเขตด้วยatฟังก์ชันสมาชิก (แต่ไม่ใช่ด้วยoperator[]) เพื่อให้คุณสามารถทำบางสิ่งบางอย่างได้หากคุณอ้างอิงดัชนีที่ไม่มีอยู่แทนที่จะเฝ้าดูโปรแกรมของคุณขัดข้องหรือแย่กว่านั้นคือการดำเนินการอย่างต่อเนื่องด้วยข้อมูลที่เสียหาย - ตำรา C …
111 c++  arrays  vector 

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