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

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

11
Spinlock กับ Semaphore
อะไรคือความแตกต่างพื้นฐานระหว่างเซมาฟอร์และสปินล็อค? เมื่อใดที่เราจะใช้เซมาฟอร์บนสปินล็อค?
119 c++  c  linux  unix  operating-system 

2
จะใช้รหัส C ++ เดียวกันสำหรับ Android และ iOS ได้อย่างไร?
Android ที่มีNDKรองรับโค้ด C / C ++ และ iOS ที่มีObjective-C ++ก็รองรับเช่นกันดังนั้นฉันจะเขียนแอปพลิเคชันด้วยโค้ด C / C ++ ที่แชร์ระหว่าง Android และ iOS ได้อย่างไร

9
“ การใช้เนมสเปซ” ในส่วนหัว c ++
ในหลักสูตร c ++ ทั้งหมดของเราครูทุกคนจะใส่using namespace std;หลัง#includes ลงใน.hไฟล์เสมอ สิ่งนี้ดูเหมือนว่าฉันจะเป็นอันตรายตั้งแต่นั้นมาโดยการรวมส่วนหัวนั้นไว้ในโปรแกรมอื่นฉันจะได้รับเนมสเปซที่นำเข้ามาในโปรแกรมของฉันอาจจะโดยไม่รู้ตัวตั้งใจหรือต้องการ (การรวมส่วนหัวอาจซ้อนกันได้ลึกมาก) ดังนั้นคำถามของฉันจึงเป็นสองเท่า: ฉันพูดถูกหรือusing namespaceเปล่าที่ไม่ควรใช้ในไฟล์ส่วนหัวและ / หรือมีวิธียกเลิกบางอย่างเช่น: //header.h using namespace std { . . . } อีกหนึ่งคำถามในบรรทัดเดียวกัน: ส่วนหัวควรจัดเก็บส่วนหัว#includeทั้งหมดที่.cppไฟล์นั้นต้องการเฉพาะคำถามที่จำเป็นสำหรับคำจำกัดความของส่วนหัวและปล่อยให้.cppไฟล์#includeเหลือหรือไม่มีเลยและประกาศทุกสิ่งที่ต้องการเป็นextern? เหตุผลเบื้องหลังคำถามก็เหมือนกับข้างบน: ฉันไม่ต้องการความประหลาดใจเมื่อรวม.hไฟล์ นอกจากนี้ถ้าฉันพูดถูกนี่เป็นข้อผิดพลาดทั่วไปหรือไม่ ฉันหมายถึงการเขียนโปรแกรมในโลกแห่งความเป็นจริงและในโครงการ "จริง" ที่นั่น ขอบคุณ.


20
วิธีแมป c ++ enums กับสตริงได้อย่างง่ายดาย
ฉันมี enum หลายประเภทในไฟล์ส่วนหัวของไลบรารีบางไฟล์ที่ฉันใช้และฉันต้องการมีวิธีการแปลงค่า enum เป็นสตริงผู้ใช้ - และในทางกลับกัน RTTI จะไม่ทำเพื่อฉันเพราะ 'สตริงผู้ใช้' ต้องอ่านได้มากกว่าการแจงนับเล็กน้อย โซลูชันกำลังเดรัจฉานจะมีฟังก์ชันมากมายเช่นนี้ แต่ฉันรู้สึกว่ามันเหมือน C มากเกินไป enum MyEnum {VAL1, VAL2,VAL3}; String getStringFromEnum(MyEnum e) { switch e { case VAL1: return "Value 1"; case VAL2: return "Value 2"; case VAL1: return "Value 3"; default: throw Exception("Bad MyEnum"); } } ฉันรู้สึกว่ามีวิธีแก้ปัญหาที่สวยงามโดยใช้เทมเพลต แต่ฉันยังไม่สามารถปัดหัวได้ อัปเดต:ขอบคุณสำหรับคำแนะนำ …
119 c++  templates  enums 

1
ฟังก์ชันเทมเพลตภายในคลาสเทมเพลต
ฉันมีรหัสนี้: template <class T> class MyClass { public: template <class U> void foo() { U a; a.invoke(); } }; ฉันต้องการในรูปแบบนี้: template <class T> class MyClass { public: template <class U> void foo(); }; template <class T> /* ????? */ void MyClass<T>::foo() { U a; a.invoke(); } ฉันจะทำสิ่งนี้ได้อย่างไร? ไวยากรณ์ที่ถูกต้องคืออะไร?
119 c++  templates 

7
จะคอมไพล์สำหรับ Windows บน Linux ด้วย gcc / g ++ ได้อย่างไร
ฉันได้เขียนเอฟเฟกต์บางอย่างใน C ++ (g ++) โดยใช้ freeglut บน Linux และฉันรวบรวมด้วย g++ -Wall -lglut part8.cpp -o part8 ดังนั้นฉันจึงสงสัยว่าเป็นไปได้หรือไม่ที่ g ++ จะสร้างไฟล์ปฏิบัติการ Windows ที่คอมไพล์แบบคงที่ซึ่งมีทุกอย่างที่จำเป็น? ฉันไม่มี Windows ดังนั้นมันจะเจ๋งมากถ้าฉันทำได้บน Linux :)
119 c++  opengl  gcc  glut  freeglut 

30
วิธีปรับปรุงตรรกะเพื่อตรวจสอบว่าค่าบูลีน 4 ค่าตรงกับบางกรณีหรือไม่
ฉันมีboolค่าสี่ค่า: bool bValue1; bool bValue2; bool bValue3; bool bValue4; ค่าที่ยอมรับได้คือ: Scenario 1 | Scenario 2 | Scenario 3 bValue1: true | true | true bValue2: true | true | false bValue3: true | true | false bValue4: true | false | false ตัวอย่างเช่นสถานการณ์นี้ไม่สามารถยอมรับได้: bValue1: false bValue2: true bValue3: true bValue4: …
118 c++  if-statement 

15
เหตุใดพอยน์เตอร์จึงไม่เริ่มต้นด้วย NULL ตามค่าเริ่มต้น
ใครช่วยอธิบายได้NULLไหมว่าทำไมพอยน์เตอร์ถึงไม่เริ่มต้น ตัวอย่าง: void test(){ char *buf; if (!buf) // whatever } โปรแกรมจะไม่เข้าไปใน if เพราะbufไม่ใช่โมฆะ ฉันต้องการทราบว่าเหตุใดเราจึงต้องมีตัวแปรที่มีถังขยะอยู่ในกรณีใดตัวชี้พิเศษที่ระบุถึงถังขยะในหน่วยความจำ

6
ตรวจสอบว่า stdin เป็นขั้วหรือท่อ?
เมื่อฉันรัน " python" จากเทอร์มินัลโดยไม่มีข้อโต้แย้งมันจะแสดงเชลล์โต้ตอบของ Python เมื่อฉันรัน " cat | python" จากเทอร์มินัลมันจะไม่เปิดโหมดโต้ตอบ อย่างไรก็ตามโดยไม่ได้รับอินพุตใด ๆ ก็ตรวจพบว่าเชื่อมต่อกับท่อ ฉันจะตรวจจับที่คล้ายกันใน C หรือ C ++ หรือ Qt ได้อย่างไร
118 c++  c  qt  pipe  stdin 

9
ความจำรั่วไหลไปได้ไกลแค่ไหน?
ฉันเจอปัญหาหน่วยความจำรั่วหลายครั้ง โดยปกติเมื่อฉันรู้สึกmallocเหมือนไม่มีวันพรุ่งนี้หรือห้อยโหนFILE *เหมือนซักผ้าสกปรก โดยทั่วไปฉันถือว่า (อ่าน: หวังเป็นอย่างยิ่ง) ว่าหน่วยความจำทั้งหมดจะถูกล้างอย่างน้อยที่สุดเมื่อโปรแกรมสิ้นสุดลง มีสถานการณ์ใดบ้างที่จะไม่รวบรวมหน่วยความจำที่รั่วไหลเมื่อโปรแกรมหยุดทำงานหรือล่ม? หากคำตอบแตกต่างกันอย่างมากในแต่ละภาษาให้เน้นที่ C (++) โปรดสังเกตการใช้วลีที่เกินความจริงเช่น 'เหมือนไม่มีวันพรุ่งนี้' และ 'ห้อย ... เหมือนซักผ้าสกปรก' ความไม่ปลอดภัย * malloc* อาจทำร้ายคนที่คุณรักได้ นอกจากนี้โปรดใช้ความระมัดระวังในการซักผ้าที่สกปรก
118 c++  c  memory  memory-leaks 

9
ฉันได้รับค่าที่มีขนาดใหญ่กว่า 8 บิตจากจำนวนเต็ม 8 บิตได้อย่างไร
ฉันติดตามแมลงที่น่ารังเกียจอย่างยิ่งที่ซ่อนอยู่หลังอัญมณีชิ้นเล็ก ๆ นี้ ผมทราบว่าต่อซี ++ สเปคลงนามล้นเป็นพฤติกรรมที่ไม่ได้กำหนด sizeof(int)แต่เมื่อล้นเกิดขึ้นเมื่อค่าที่จะขยายไปยังบิตกว้าง ตามที่ผมเข้าใจมัน incrementing ไม่ควรที่เคยเป็นพฤติกรรมที่ไม่ได้กำหนดตราบเท่าที่char sizeof(char) < sizeof(int)แต่นั่นไม่ได้อธิบายว่าcการได้รับค่าที่เป็นไปไม่ได้อย่างไร ในฐานะจำนวนเต็ม 8 บิตจะcเก็บค่าที่มากกว่าความกว้างบิตได้อย่างไร รหัส // Compiled with gcc-4.7.2 #include <cstdio> #include <stdint.h> #include <climits> int main() { int8_t c = 0; printf("SCHAR_MIN: %i\n", SCHAR_MIN); printf("SCHAR_MAX: %i\n", SCHAR_MAX); for (int32_t i = 0; i <= 300; i++) printf("c: …

5
`is_base_of` ทำงานอย่างไร
รหัสต่อไปนี้ทำงานอย่างไร typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { template <typename T> static yes check(D*, T); static no check(B*, int); static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes); }; …

8
มีคำใบ้คอมไพเลอร์สำหรับ GCC เพื่อบังคับให้การทำนายสาขาเป็นไปในทางที่แน่นอนหรือไม่?
สำหรับสถาปัตยกรรม Intel มีวิธีใดที่จะสั่งให้คอมไพเลอร์ GCC สร้างโค้ดที่บังคับให้การทำนายสาขาเป็นวิธีเฉพาะในโค้ดของฉันเสมอ ฮาร์ดแวร์ของ Intel รองรับสิ่งนี้หรือไม่ แล้วคอมไพเลอร์หรือฮาร์ดแวร์อื่น ๆ ล่ะ? ฉันจะใช้สิ่งนี้ในรหัส C ++ ซึ่งฉันรู้ว่ากรณีที่ฉันต้องการทำงานอย่างรวดเร็วและไม่สนใจเกี่ยวกับการชะลอตัวเมื่อสาขาอื่นต้องดำเนินการแม้ว่าสาขานั้นจะเพิ่งเข้ามาเมื่อไม่นานมานี้ for (;;) { if (normal) { // How to tell compiler to always branch predict true value? doSomethingNormal(); } else { exceptionalCase(); } } ตามคำถามสำหรับ Evdzhan Mustafa คำใบ้สามารถระบุคำใบ้เป็นครั้งแรกที่โปรเซสเซอร์พบคำสั่งการทำนายสาขาที่ตามมาทั้งหมดทำงานได้ตามปกติหรือไม่

13
remove_if เทียบเท่าสำหรับ std :: map
ฉันพยายามลบองค์ประกอบต่างๆออกจากแผนที่ตามเงื่อนไขเฉพาะ ฉันจะทำได้อย่างไรโดยใช้อัลกอริทึม STL เริ่มแรกฉันคิดว่าจะใช้ remove_ifแต่เป็นไปไม่ได้เนื่องจาก remove_if ใช้ไม่ได้กับคอนเทนเนอร์ที่เชื่อมโยง มีอัลกอริทึมที่เทียบเท่า "remove_if" ที่ใช้ได้กับแผนที่หรือไม่ ในฐานะตัวเลือกง่ายๆฉันคิดว่าจะวนลูปผ่านแผนที่และลบ แต่กำลังวนรอบแผนที่และลบตัวเลือกที่ปลอดภัยหรือไม่ (เนื่องจากตัวทำซ้ำไม่ถูกต้องหลังจากลบ) ฉันใช้ตัวอย่างต่อไปนี้: bool predicate(const std::pair<int,std::string>& x) { return x.first > 2; } int main(void) { std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six"; // does not work, an …
118 c++  stl  map 

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