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

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

7
std :: องค์ประกอบเวกเตอร์รับประกันว่าจะติดกันหรือไม่
คำถามของฉันง่ายมาก: มีการรับประกันว่าองค์ประกอบของเวกเตอร์ std :: ติดกันหรือไม่ ตามลำดับคำฉันสามารถใช้ตัวชี้ไปยังองค์ประกอบแรกของ std :: vector เป็น C-array ได้หรือไม่ หากหน่วยความจำของฉันทำงานได้ดีมาตรฐาน C ++ ก็ไม่ได้รับประกันเช่นนั้น อย่างไรก็ตามข้อกำหนด std :: vector นั้นแทบจะเป็นไปไม่ได้เลยที่จะตอบสนองความต้องการเหล่านั้นหากองค์ประกอบไม่ติดกัน ใครสามารถชี้แจงเรื่องนี้ได้บ้าง? ตัวอย่าง: std::vector<int> values; // ... fill up values if( !values.empty() ) { int *array = &values[0]; for( int i = 0; i < values.size(); ++i ) { int …
111 c++  vector  standards 

11
จะลบสัญลักษณ์ C / C ++ ที่ไม่ได้ใช้ด้วย GCC และ ld ได้อย่างไร?
ฉันต้องการปรับขนาดของไฟล์ปฏิบัติการของฉันให้เหมาะสมอย่างรุนแรง ( ARMการพัฒนา) และฉันสังเกตเห็นว่าในรูปแบบการสร้างปัจจุบัน ( gcc+ ld) สัญลักษณ์ที่ไม่ได้ใช้ของฉันจะไม่ถูกตัดออก การใช้งานของarm-strip --strip-unneededสำหรับที่เกิด executables / ห้องสมุดไม่เปลี่ยนขนาดการส่งออกของปฏิบัติการที่(ผมมีความคิดว่าทำไมไม่มีบางทีมันก็ไม่ได้) จะเป็นอย่างไร(ถ้ามี)ในการแก้ไขไปป์ไลน์อาคารของฉันเพื่อให้สัญลักษณ์ที่ไม่ได้ใช้ถูกดึงออกจากไฟล์ผลลัพธ์ ฉันจะไม่นึกถึงสิ่งนี้ด้วยซ้ำ แต่สภาพแวดล้อมที่ฝังอยู่ในปัจจุบันของฉันไม่ได้ "ทรงพลัง" มากนักและประหยัดได้แม้จะ500Kไม่ได้2Mผลลัพธ์ในการเพิ่มประสิทธิภาพการโหลดที่ดีมาก อัปเดต: น่าเสียดายที่gccเวอร์ชันปัจจุบันที่ฉันใช้ไม่มี-dead-stripตัวเลือกและ-ffunction-sections... + --gc-sectionsสำหรับldไม่ได้ให้ความแตกต่างอย่างมีนัยสำคัญสำหรับผลลัพธ์ที่ได้ ฉันตกใจมากที่เรื่องนี้กลายเป็นปัญหาเพราะฉันแน่ใจว่าgcc + ldควรดึงสัญลักษณ์ที่ไม่ได้ใช้ออกโดยอัตโนมัติ (ทำไมพวกเขาถึงต้องเก็บไว้?)
111 c++  c  gcc  ld  strip 

5
“ IB” และ“ UB” หมายความว่าอย่างไร
ฉันเคยเห็นคำว่า "IB" และ "UB" ใช้หลายครั้งโดยเฉพาะในบริบทของ C ++ ฉันได้ลองใช้ googling แล้ว แต่เห็นได้ชัดว่าชุดค่าผสมสองตัวอักษรเหล่านี้มีประโยชน์มาก : ป ฉันถามคุณว่า ... พวกเขาหมายความว่าอย่างไรเมื่อพวกเขาพูดราวกับว่าพวกเขาเป็นสิ่งที่ไม่ดี?

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


4
โมดูล C ++ - เหตุใดจึงถูกลบออกจาก C ++ 0x พวกเขาจะกลับมาในภายหลังหรือไม่?
ฉันเพิ่งค้นพบร่าง C ++ 0x เก่าเกี่ยวกับโมดูลใน C ++ 0x แนวคิดคือการออกจากระบบ. h / .cpp ปัจจุบันโดยการเขียนเฉพาะไฟล์. cpp ซึ่งจะสร้างไฟล์โมดูลระหว่างการคอมไพล์ซึ่งจะถูกใช้โดยไฟล์. cpp อื่น ๆ นี่ดูเหมือนเป็นคุณสมบัติที่ยอดเยี่ยมจริงๆ แต่คำถามของฉันคือทำไมพวกเขาถึงลบมันออกจาก C ++ 0x เป็นเพราะปัญหาทางเทคนิคมากเกินไปหรือไม่? ไม่มีเวลา? และคุณคิดว่าพวกเขาจะพิจารณาทำงานกับ C ++ เวอร์ชันซ่อนเร้นหรือไม่?

2
โทเค็น“ ……” มีความหมายว่าอย่างไร? คือตัวดำเนินการจุดไข่ปลาคู่บนชุดพารามิเตอร์
ในขณะที่เรียกดูการใช้งานส่วนหัว C ++ 11 ใหม่ในปัจจุบันของ gcc ฉันพบโทเค็น "...... " คุณสามารถตรวจสอบได้ว่าโค้ดต่อไปนี้คอมไพล์ดี [ผ่าน ideone.com] template <typename T> struct X { /* ... */ }; template <typename T, typename ... U> struct X<T(U......)> // this line is the important one { /* ... */ }; ความหมายของโทเค็นนี้คืออะไร? แก้ไข: ดูเหมือนว่า SO ถูกตัด "...... " ในชื่อคำถามเป็น …



11
การทำความเข้าใจความหมายของคำศัพท์และแนวคิด - RAII (Resource Acquisition is Initialization)
คุณช่วยนักพัฒนา C ++ ช่วยให้คำอธิบายที่ดีแก่เราได้ไหมว่า RAII คืออะไรทำไมจึงสำคัญและอาจมีความเกี่ยวข้องกับภาษาอื่นหรือไม่ ผมทำรู้นิด ๆ หน่อย ๆ ฉันเชื่อว่าย่อมาจาก "Resource Acquisition is Initialization" อย่างไรก็ตามชื่อนั้นไม่ได้ทำให้สับสนกับความเข้าใจ (อาจไม่ถูกต้อง) ของฉันเกี่ยวกับสิ่งที่ RAII คือ: ฉันรู้สึกว่า RAII เป็นวิธีเริ่มต้นวัตถุบนสแต็กดังนั้นเมื่อตัวแปรเหล่านั้นออกไปนอกขอบเขตผู้ทำลายจะโดยอัตโนมัติ เรียกว่าทำให้ทรัพยากรถูกล้าง เหตุใดจึงไม่เรียกว่า "ใช้สแต็กเพื่อทริกเกอร์การล้างข้อมูล" (UTSTTC :)? คุณจะเดินทางจากที่นั่นไปยัง "RAII" ได้อย่างไร? และคุณจะสร้างบางสิ่งบนสแต็กที่จะทำให้เกิดการล้างบางสิ่งที่อาศัยอยู่บนฮีปได้อย่างไร? นอกจากนี้ยังมีกรณีที่คุณไม่สามารถใช้ RAII ได้หรือไม่? คุณเคยคิดว่าตัวเองอยากเก็บขยะไหม? อย่างน้อยคนเก็บขยะที่คุณสามารถใช้สำหรับวัตถุบางอย่างในขณะที่ปล่อยให้คนอื่นจัดการ? ขอบคุณ.

3
อะไรคือความแตกต่างพื้นฐานระหว่าง MFC และ ATL?
สมมติว่าฉันกำลังเพียงใช้พวกเขาสำหรับ "ปกติ" โปรแกรม GUI (ไม่ COM ไม่มี ActiveX ไม่มีอะไรแฟนซี) สิ่งที่เป็นความแตกต่างพื้นฐานฉันจะเห็นระหว่าง ATL และ MFC เพื่อช่วยฉันคิดออกที่หนึ่งที่จะใช้งานหรือไม่ ฉันได้ทำการค้นหาบนเว็บแล้ว แต่ในที่สุดก็ไม่มีคำตอบใดที่ตอบคำถามของฉันได้เลย: http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx : "ATL เป็นวิธีที่ง่ายและรวดเร็วในการสร้างคอมโพเนนต์ COM ใน C ++ และรักษาขนาดเล็กใช้ ATL เพื่อสร้างตัวควบคุมหากคุณไม่ต้องการฟังก์ชันในตัวทั้งหมดที่ MFC มีให้โดยอัตโนมัติ" ไม่ตอบคำถามของฉันจริงๆเพราะ: ฉันไม่ได้ทำงานกับ COM นี่หมายความว่า MFC ไม่เร็วหรือ? ทำไม / อย่างไร "MFC ช่วยให้คุณสร้างแอปพลิเคชันเต็มรูปแบบตัวควบคุม ActiveX และเอกสารที่ใช้งานอยู่หากคุณได้สร้างตัวควบคุมด้วย MFC แล้วคุณอาจต้องการพัฒนาต่อใน MFC เมื่อสร้างตัวควบคุมใหม่ให้พิจารณาใช้ ATL หากคุณไม่ต้องการ ฟังก์ชันการทำงานในตัวทั้งหมดของ MFC …
110 c++  visual-c++  mfc  atl 

8
Malloc vs new - padding ที่แตกต่างกัน
ฉันกำลังตรวจสอบรหัส C ++ ของผู้อื่นสำหรับโครงการของเราที่ใช้ MPI สำหรับการประมวลผลประสิทธิภาพสูง (10 ^ 5 - 10 ^ 6 คอร์) รหัสนี้มีวัตถุประสงค์เพื่อให้สามารถสื่อสารระหว่าง (อาจ) เครื่องจักรที่แตกต่างกันในสถาปัตยกรรมที่แตกต่างกัน เขาเขียนความคิดเห็นที่กล่าวถึงบางสิ่งตามบรรทัดของ: ปกติเราจะใช้newและdeleteแต่ที่นี่ผมใช้และmalloc freeสิ่งนี้จำเป็นเนื่องจากคอมไพเลอร์บางตัวจะเพิ่มข้อมูลแตกต่างกันเมื่อnewใช้งานซึ่งนำไปสู่ข้อผิดพลาดในการถ่ายโอนข้อมูลระหว่างแพลตฟอร์มต่างๆ mallocนี้ไม่ได้เกิดขึ้นกับ สิ่งนี้ไม่เข้ากับสิ่งที่ฉันรู้จากคำถามมาตรฐานnewเทียบกับmallocคำถาม อะไรคือความแตกต่างระหว่าง new / delete และ malloc / free? บอกใบ้ถึงแนวคิดที่ว่าคอมไพเลอร์สามารถคำนวณขนาดของวัตถุได้แตกต่างกัน (แต่เหตุใดจึงแตกต่างจากการใช้sizeof) malloc และตำแหน่งใหม่กับใหม่เป็นคำถามที่ได้รับความนิยมพอสมควร แต่พูดถึงการnewใช้ตัวสร้างmallocเท่านั้นซึ่งไม่เกี่ยวข้องกับสิ่งนี้ malloc เข้าใจการจัดตำแหน่งอย่างไร บอกว่าหน่วยความจำได้รับการรับรองว่าจัดวางอย่างถูกต้องnewหรือmallocเป็นสิ่งที่ฉันเคยคิดไว้ก่อนหน้านี้ ฉันเดาว่าเขาวินิจฉัยจุดบกพร่องของตัวเองผิดพลาดในอดีตและอนุมานได้ว่าnewและmallocให้จำนวนช่องว่างที่แตกต่างกันซึ่งฉันคิดว่าอาจไม่เป็นความจริง แต่ฉันไม่พบคำตอบใน Google หรือคำถามก่อนหน้านี้ ช่วยฉันด้วย StackOverflow คุณเป็นความหวังเดียวของฉัน!

30
ใน C / C ++ วิธีที่ง่ายที่สุดในการย้อนกลับลำดับของบิตเป็นไบต์คืออะไร?
แม้ว่าจะมีหลายวิธีในการย้อนกลับลำดับบิตในแต่ละไบต์ แต่ฉันก็อยากรู้ว่าอะไร "ง่ายที่สุด" สำหรับนักพัฒนาในการนำไปใช้ และโดยการย้อนกลับฉันหมายถึง: 1110 -> 0111 0010 -> 0100 คำถามนี้คล้ายกับ แต่ไม่ซ้ำกับคำถาม PHP นี้ คำถามนี้คล้ายกับ แต่ไม่ซ้ำกับคำถาม C นี้ คำถามนี้กำลังถามหาวิธีที่ง่ายที่สุดในการนำไปใช้โดยนักพัฒนา "อัลกอริทึมที่ดีที่สุด" เกี่ยวข้องกับหน่วยความจำและประสิทธิภาพของซีพียู
110 c++  c  bit-manipulation 

10
หมายเลขบรรทัด C / C ++
เพื่อวัตถุประสงค์ในการดีบักฉันสามารถรับหมายเลขบรรทัดในคอมไพเลอร์C / C ++ ได้หรือไม่ (วิธีมาตรฐานหรือวิธีเฉพาะสำหรับคอมไพเลอร์บางตัว) เช่น if(!Logical) printf("Not logical value at line number %d \n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation)

5
การอ้างอิงที่ไม่ได้กำหนดถึง `` WinMain @ 16 ''
เมื่อฉันพยายามสร้างโปรแกรมโดยใช้Eclipse CDTฉันจะได้รับสิ่งต่อไปนี้: /mingw/lib/libmingw32.a(main.o):main.c:(.text+0x106): การอ้างอิงที่ไม่ได้กำหนดถึง `WinMain @ 16 ทำไมถึงเป็นเช่นนั้น? และฉันจะแก้ปัญหานี้ได้อย่างไร
110 c++  eclipse  eclipse-cdt 

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