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

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

2
มีเจตนาโดยคณะกรรมการมาตรฐาน C ++ หรือไม่ว่าใน C ++ 11 unordered_map ทำลายสิ่งที่แทรก?
ฉันเพิ่งเสียชีวิตไปสามวันในการติดตามข้อผิดพลาดที่แปลกมากที่ unordered_map :: insert () ทำลายตัวแปรที่คุณแทรก ลักษณะการทำงานที่ไม่ชัดเจนนี้เกิดขึ้นในคอมไพเลอร์ล่าสุดเท่านั้น: ฉันพบว่า clang 3.2-3.4 และ GCC 4.8 เป็นคอมไพเลอร์เพียงตัวเดียวที่แสดง "คุณลักษณะ" นี้ นี่คือโค้ดที่ลดลงบางส่วนจากฐานรหัสหลักของฉันซึ่งแสดงให้เห็นถึงปัญหา: #include <memory> #include <unordered_map> #include <iostream> int main(void) { std::unordered_map<int, std::shared_ptr<int>> map; auto a(std::make_pair(5, std::make_shared<int>(5))); std::cout << "a.second is " << a.second.get() << std::endl; map.insert(a); // Note we are NOT doing insert(std::move(a)) std::cout …
114 c++  gcc  c++11  clang  standards 

11
ตัวชี้อัจฉริยะ: ใครเป็นเจ้าของวัตถุ [ปิด]
มันยากที่จะบอกว่ากำลังถามอะไรที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือมีวาทศิลป์และไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน8 ปีที่ผ่านมา C ++ เป็นข้อมูลเกี่ยวกับหน่วยความจำที่เป็นเจ้าของ - aka ความหมายเป็นเจ้าของ เป็นความรับผิดชอบของเจ้าของหน่วยความจำที่จัดสรรแบบไดนามิกเพื่อปลดปล่อยหน่วยความจำนั้น ดังนั้นคำถามจึงกลายเป็นว่าใครเป็นเจ้าของความทรงจำ ในความเป็นเจ้าของ C ++ จะถูกบันทึกโดยชนิดที่ตัวชี้ดิบถูกห่อไว้ภายในดังนั้นในโปรแกรม C ++ ที่ดี (IMO) จึงหายากมาก ( หายากไม่ใช่ไม่เคย ) ที่จะเห็นตัวชี้ดิบที่ส่งผ่านไปรอบ ๆ (เนื่องจากตัวชี้ดิบไม่มีการอนุมานความเป็นเจ้าของดังนั้นเราจึงสามารถ อย่าบอกว่าใครเป็นเจ้าของหน่วยความจำดังนั้นหากไม่ได้อ่านเอกสารอย่างรอบคอบคุณจะไม่สามารถบอกได้ว่าใครเป็นผู้รับผิดชอบในการเป็นเจ้าของ) ในทางกลับกันเป็นเรื่องยากที่จะเห็นตัวชี้ดิบที่เก็บไว้ในคลาสแต่ละตัวชี้ดิบจะถูกเก็บไว้ในกระดาษห่อตัวชี้อัจฉริยะของตัวเอง ( หมายเหตุ:หากคุณไม่ได้เป็นเจ้าของวัตถุคุณไม่ควรเก็บไว้เพราะคุณไม่สามารถรู้ได้ว่าเมื่อไรที่มันจะออกนอกขอบเขตและถูกทำลาย) ดังนั้นคำถาม: ผู้คนมีความหมายเกี่ยวกับความเป็นเจ้าของประเภทใด คลาสมาตรฐานใดบ้างที่ใช้ในการนำความหมายเหล่านั้นไปใช้ คุณคิดว่ามันมีประโยชน์ในสถานการณ์ใดบ้าง? ให้เก็บประเภทการเป็นเจ้าของทางความหมายไว้ 1 ประเภทต่อคำตอบเพื่อให้สามารถโหวตขึ้นและลงทีละรายการได้ สรุป: ตามแนวคิดแล้วตัวชี้ที่ชาญฉลาดนั้นเรียบง่ายและการนำไปใช้อย่างไร้เดียงสาทำได้ง่าย ฉันได้เห็นการพยายามใช้งานหลายครั้ง แต่มักจะใช้งานไม่ได้ในลักษณะบางอย่างที่ไม่ชัดเจนสำหรับการใช้งานทั่วไปและตัวอย่าง ดังนั้นฉันขอแนะนำให้ใช้ตัวชี้อัจฉริยะที่ผ่านการทดสอบอย่างดีจากไลบรารีแทนที่จะหมุนตัวเอง std::auto_ptrหรือหนึ่งในตัวชี้สมาร์ท Boost ดูเหมือนจะครอบคลุมทุกความต้องการของฉัน std::auto_ptr<T>: คนเดียวเป็นเจ้าของวัตถุ …

9
“ int & foo ()” ใน C ++ หมายความว่าอย่างไร
ในขณะที่อ่านคำอธิบายเกี่ยวกับ lvalues ​​และ rvalues ​​บรรทัดของโค้ดเหล่านี้ติดอยู่กับฉัน: int& foo(); foo() = 42; // OK, foo() is an lvalue ฉันลองใช้ใน g ++ แต่คอมไพเลอร์แจ้งว่า "undefined reference to foo ()" ถ้าฉันเพิ่ม int foo() { return 2; } int main() { int& foo(); foo() = 42; } มันรวบรวมดี แต่ใช้มันให้ความผิดส่วน เพียงแค่บรรทัด int& foo(); โดยตัวมันเองทั้งคอมไพล์และรันโดยไม่มีปัญหาใด ๆ รหัสนี้หมายถึงอะไร? คุณจะกำหนดค่าให้กับการเรียกใช้ฟังก์ชันได้อย่างไรและเหตุใดจึงไม่ใช่ค่า …

9
ส่งผ่านอาร์กิวเมนต์ตัวแปรไปยังฟังก์ชันอื่นที่ยอมรับรายการอาร์กิวเมนต์ตัวแปร
ดังนั้นฉันมี 2 ฟังก์ชันที่ทั้งสองมีอาร์กิวเมนต์ที่คล้ายกัน void example(int a, int b, ...); void exampleB(int b, ...); ตอนนี้exampleเรียกexampleBแต่ฉันจะส่งผ่านตัวแปรในรายการอาร์กิวเมนต์ตัวแปรโดยไม่แก้ไขได้อย่างไรexampleB(เนื่องจากมีการใช้ที่อื่นแล้วด้วย)

6
ฉันจะเขียน bit-mask ที่บำรุงรักษาได้รวดเร็วและคอมไพล์ไทม์ใน C ++ ได้อย่างไร
ฉันมีรหัสที่มากกว่าหรือน้อยกว่านี้: #include <bitset> enum Flags { A = 1, B = 2, C = 3, D = 5, E = 8, F = 13, G = 21, H, I, J, K, L, M, N, O }; void apply_known_mask(std::bitset<64> &bits) { const Flags important_bits[] = { B, D, E, H, K, …

8
จะติดตั้งคอมไพเลอร์ข้าม Raspberry Pi บนเครื่องโฮสต์ Linux ของฉันได้อย่างไร
ฉันกำลังพยายามรวบรวมข้ามสำหรับ Raspberry Pi ที่ทำงานบนเครื่อง Ubuntu ของฉัน ในระหว่างความพยายามครั้งแรกของฉันฉันใช้คอมไพเลอร์ arm-linux-gnueabi ซึ่งมีอยู่ใน repo ของ Ubuntu ฉันได้ผล ฉันสามารถสร้างการอ้างอิงทั้งหมดและใช้ cross-compiler ในโครงการ cmake ของฉัน อย่างไรก็ตามฉันเชื่อว่าฉันควรใช้เวอร์ชัน hf ดังนั้นฉันจึงเปลี่ยนไปใช้ arm-linux-gnueabihf จากนั้นฉันก็รู้ว่าสิ่งนี้ใช้ไม่ได้กับ Raspberry Pi เนื่องจากเป็น armv6 หลังจากที่บาง Googling ผมแล้วพบtoolchain ที่สร้างไว้ล่วงหน้าจาก GitHub ฉันดาวน์โหลด toolchain แต่ฉันไม่เข้าใจวิธี "ติดตั้ง" จริงๆ ฉันแตกไฟล์ไปยังโฮมไดเร็กทอรีของฉัน โครงสร้างไดเร็กทอรีมีลักษณะดังนี้: /gcc-linearo-arm-linux-gnueabihf-raspbian /arm-linux-gnueabihf /bin (contains g++, gcc, etc) /lib (contains libstdc++ library) …

18
สร้างตัวเลขสุ่มตามการแจกแจงปกติใน C / C ++
ฉันจะสร้างตัวเลขสุ่มตามการแจกแจงปกติใน C หรือ C ++ ได้อย่างไร ฉันไม่ต้องการใช้ Boost ใด ๆ ฉันรู้ว่า Knuth พูดถึงเรื่องนี้เป็นเวลานาน แต่ตอนนี้ฉันไม่มีหนังสือของเขาอยู่ในมือ

3
แลมด้าทั่วไปทำงานอย่างไรใน C ++ 14
แลมบ์ดาทั่วไปทำงานอย่างไร ( autoคีย์เวิร์ดเป็นประเภทอาร์กิวเมนต์) ในมาตรฐาน C ++ 14 มันขึ้นอยู่กับแม่แบบ C ++ ที่คอมไพเลอร์ประเภทอาร์กิวเมนต์แต่ละตัวสร้างฟังก์ชันใหม่ที่มีเนื้อความเดียวกัน แต่แทนที่ประเภท (ความหลากหลายของเวลาคอมไพล์) หรือคล้ายกับชื่อสามัญของ Java (การลบประเภท) มากกว่าหรือไม่? ตัวอย่างโค้ด: auto glambda = [](auto a) { return a; };
114 c++  lambda  auto  c++14 

9
อะไรคือวิธีที่ดีที่สุดในการทำซ้ำสองคอนเทนเนอร์ขึ้นไปพร้อมกัน
C ++ 11 มีหลายวิธีในการวนซ้ำบนคอนเทนเนอร์ ตัวอย่างเช่น: ลูปตามช่วง for(auto c : container) fun(c) มาตรฐาน :: for_each for_each(container.begin(),container.end(),fun) อย่างไรก็ตามวิธีที่แนะนำในการทำซ้ำสองคอนเทนเนอร์ (หรือมากกว่า) ที่มีขนาดเท่ากันเพื่อทำสิ่งต่างๆเช่น: for(unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }


19
จะแยกวงออกจากสวิตช์ภายในได้อย่างไร?
ฉันกำลังเขียนโค้ดที่มีลักษณะดังนี้: while(true) { switch(msg->state) { case MSGTYPE: // ... break; // ... more stuff ... case DONE: break; // **HERE, I want to break out of the loop itself** } } มีวิธีใดโดยตรงที่จะทำเช่นนั้น? ฉันรู้ว่าฉันสามารถใช้แฟล็กและแยกตัวออกจากลูปได้โดยใส่ตัวแบ่งเงื่อนไขไว้หลังสวิตช์ ฉันแค่อยากรู้ว่า C ++ มีโครงสร้างสำหรับสิ่งนี้หรือไม่

7
C99 stdint.h header และ MS Visual Studio
ด้วยความประหลาดใจของฉันฉันเพิ่งค้นพบว่า C99 stdint.h หายไปจาก MS Visual Studio 2003 ขึ้นไป ฉันแน่ใจว่าพวกเขามีเหตุผล แต่มีใครรู้บ้างว่าฉันสามารถดาวน์โหลดสำเนาได้ที่ไหน? หากไม่มีส่วนหัวนี้ฉันไม่มีคำจำกัดความสำหรับประเภทที่มีประโยชน์เช่น uint32_t เป็นต้น
113 c++  c  visual-studio  c99 

10
เรียกใช้เมธอดคลาส C ++ ผ่านตัวชี้ฟังก์ชัน
ฉันจะรับฟังก์ชันพอยน์เตอร์สำหรับฟังก์ชันสมาชิกคลาสได้อย่างไรและในภายหลังเรียกฟังก์ชันสมาชิกนั้นด้วยอ็อบเจ็กต์เฉพาะ ฉันต้องการเขียน: class Dog : Animal { Dog (); void bark (); } … Dog* pDog = new Dog (); BarkFunction pBark = &Dog::bark; (*pBark) (pDog); … นอกจากนี้ถ้าเป็นไปได้ฉันต้องการเรียกใช้ตัวสร้างผ่านตัวชี้ด้วย: NewAnimalFunction pNew = &Dog::Dog; Animal* pAnimal = (*pNew)(); เป็นไปได้หรือไม่และถ้าเป็นเช่นนั้นวิธีใดที่ควรทำ

9
การสร้างอินสแตนซ์วัตถุ C ++
ฉันเป็นโปรแกรมเมอร์ C ที่พยายามเข้าใจ C ++ บทช่วยสอนจำนวนมากแสดงให้เห็นถึงการสร้างอินสแตนซ์อ็อบเจ็กต์โดยใช้ข้อมูลโค้ดเช่น: Dog* sparky = new Dog(); ซึ่งหมายความว่าในภายหลังคุณจะทำ: delete sparky; ซึ่งสมเหตุสมผล ตอนนี้ในกรณีที่ไม่จำเป็นต้องมีการจัดสรรหน่วยความจำแบบไดนามิกมีเหตุผลใดที่จะใช้สิ่งที่กล่าวมาแทน Dog sparky; และปล่อยให้ผู้ทำลายถูกเรียกเมื่อประกายไฟออกไปนอกขอบเขต? ขอบคุณ!
113 c++  instantiation 

6
Visual c ++: # รวมไฟล์จากโปรเจ็กต์อื่น ๆ ในโซลูชันเดียวกัน
ฉันกำลังทำงานกับเกมโดยใช้ Visual C ++ ฉันมีส่วนประกอบบางอย่างในโปรเจ็กต์แยกต่างหากและตั้งค่าการอ้างอิงโปรเจ็กต์ ฉันจะ # รวมไฟล์ส่วนหัวจากโปรเจ็กต์อื่นได้อย่างไร ฉันไม่รู้ว่าจะใช้คลาสจากโครงการหนึ่งไปยังอีกโครงการหนึ่งได้อย่างไร

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