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

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

5
ระดับการปรับให้เหมาะสม -O3 เป็นอันตรายใน g ++ หรือไม่
ฉันเคยได้ยินจากแหล่งต่าง ๆ (แม้ว่าส่วนใหญ่มาจากเพื่อนร่วมงานของฉัน) การรวบรวมด้วยระดับการเพิ่มประสิทธิภาพของ-O3ใน g ++ นั้นค่อนข้างอันตรายและควรหลีกเลี่ยงโดยทั่วไปเว้นแต่จะพิสูจน์แล้วว่าจำเป็น นี่เป็นเรื่องจริงหรือไม่และถ้าเป็นเช่นนั้นทำไม ฉันควรจะติดกับ-O2?

4
ทำไมฉันถึงต้องใช้ push_back แทน emplace_back
C ++ 11 emplace_backเวกเตอร์ที่มีฟังก์ชั่นใหม่ ซึ่งแตกต่างจากpush_backอาศัยการเพิ่มประสิทธิภาพของคอมไพเลอร์เพื่อหลีกเลี่ยงการคัดลอกemplace_backใช้การส่งต่อที่สมบูรณ์แบบเพื่อส่งข้อโต้แย้งโดยตรงไปที่นวกรรมิกเพื่อสร้างวัตถุในสถานที่ ดูเหมือนว่าฉันemplace_backจะทำทุกอย่างpush_backได้ แต่บางครั้งมันก็ทำได้ดีกว่า (แต่ไม่เคยแย่ลง) ฉันต้องใช้เหตุผลpush_backอะไร
232 c++  c++11  std 

30
หน่วยความจำรั่วไหลตกลงไหม [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เป็นที่ยอมรับหรือไม่ว่ามีหน่วยความจำรั่วในแอพพลิเคชั่น C หรือ C ++ ของคุณ? จะเกิดอะไรขึ้นถ้าคุณจัดสรรหน่วยความจำบางส่วนและใช้จนถึงรหัสบรรทัดสุดท้ายในแอปพลิเคชันของคุณ (ตัวอย่างเช่น destructor ของวัตถุระดับโลก) ตราบใดที่ปริมาณการใช้หน่วยความจำไม่เพิ่มขึ้นเรื่อย ๆ มันก็โอเคที่จะไว้ใจระบบปฏิบัติการให้เพิ่มหน่วยความจำให้คุณหรือเปล่าเมื่อแอปพลิเคชันของคุณถูกยกเลิก (ใน Windows, Mac และ Linux)? คุณจะพิจารณาเรื่องนี้ว่าหน่วยความจำจริงรั่วไหลหรือไม่หากหน่วยความจำนั้นถูกใช้อย่างต่อเนื่องจนกว่า OS จะเป็นอิสระ ถ้าห้องสมุดบุคคลที่สามบังคับให้คุณทำเช่นนี้ล่ะ จะปฏิเสธที่จะใช้ห้องสมุดบุคคลที่สามไม่ว่ามันจะดีแค่ไหน ฉันเห็นข้อเสียเพียงข้อเดียวในทางปฏิบัติและนั่นก็คือการรั่วไหลที่ไม่เป็นอันตรายเหล่านี้จะปรากฏขึ้นพร้อมกับเครื่องมือตรวจจับการรั่วไหลของหน่วยความจำว่าเป็นผลบวกปลอม
231 c++  c  memory-leaks 

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

4
การใช้ 'อัตโนมัติ' ของ C ++ 11 สามารถปรับปรุงประสิทธิภาพได้หรือไม่
ฉันเห็นได้ว่าทำไมautoประเภทใน C ++ 11 ช่วยปรับปรุงความถูกต้องและการบำรุงรักษา ฉันอ่านแล้วว่ามันยังสามารถปรับปรุงประสิทธิภาพได้ ( เกือบจะอัตโนมัติทุกครั้งโดย Herb Sutter) แต่ฉันพลาดคำอธิบายที่ดี จะautoปรับปรุงประสิทธิภาพได้อย่างไร ใครสามารถยกตัวอย่างได้บ้าง
230 c++  performance  c++11  auto 

10
ฟังก์ชั่นแลมบ์ดาสามารถ Templated ได้หรือไม่?
ใน C ++ 11 มีวิธีการสร้างฟังก์ชัน lambda หรือไม่? หรือมันเจาะจงเกินไปที่จะรับเทมเพลต? ฉันเข้าใจว่าฉันสามารถกำหนด class / functor คลาสสิกเทมเพลตแทน แต่คำถามเป็นเช่น: ภาษาอนุญาตให้ฟังก์ชัน lambda templating?
230 c++  templates  lambda  c++11 

10
วิธีการแปลง QString เป็น std :: string?
ฉันพยายามทำสิ่งนี้: QString string; // do things... std::cout << string << std::endl; แต่รหัสไม่ได้รวบรวม วิธีการส่งออกเนื้อหาของ qstring ลงในคอนโซล (เช่นสำหรับการแก้ไขจุดบกพร่องหรือเหตุผลอื่น ๆ )? วิธีการแปลงQStringเป็นstd::string?

30
จะทำอย่างไรกับไฟล์ต้นฉบับ C ++ 11,000 บรรทัด
ดังนั้นเราจึงมีไฟล์ต้นฉบับขนาดใหญ่ (มีขนาด 11,000 บรรทัดหรือไม่) ไฟล์ mainmodule.cpp ในโครงการของเราและทุกครั้งที่ฉันต้องแตะมันฉันประจบประแจง เนื่องจากไฟล์นี้มีขนาดกลางและใหญ่มากจึงมีการสะสมรหัสมากขึ้นเรื่อย ๆ และฉันไม่สามารถนึกถึงวิธีที่ดีที่จะทำให้มันเริ่มหดตัวลง ไฟล์ถูกใช้และเปลี่ยนแปลงอย่างแข็งขันในหลายเวอร์ชันการบำรุงรักษา (> 10) ของผลิตภัณฑ์ของเราดังนั้นจึงเป็นการยากที่จะปรับโครงสร้างใหม่ ถ้าฉันจะแยก "ง่ายๆ" ให้พูดเพื่อเริ่มต้นเป็น 3 ไฟล์จากนั้นการรวมการเปลี่ยนแปลงกลับจากเวอร์ชันการบำรุงรักษาจะกลายเป็นฝันร้าย และถ้าคุณแบ่งไฟล์ด้วยประวัติที่ยาวนานและเต็มไปด้วยเช่นนั้นการติดตามและตรวจสอบการเปลี่ยนแปลงเก่า ๆ ในSCCประวัติศาสตร์นั้นจะยากขึ้นมาก ไฟล์นั้นมี "คลาสหลัก" (การมอบหมายงานภายในและการประสานงานหลัก) ของโปรแกรมของเราดังนั้นทุกครั้งที่มีการเพิ่มฟีเจอร์มันจะมีผลกับไฟล์นี้และทุกครั้งที่มันเติบโต :-( คุณจะทำอะไรในสถานการณ์นี้ มีแนวคิดใดบ้างเกี่ยวกับวิธีย้ายฟีเจอร์ใหม่ไปยังไฟล์ต้นฉบับที่แยกต่างหากโดยไม่ทำให้SCCเวิร์กโฟลว์ยุ่งเหยิง? (หมายเหตุเกี่ยวกับเครื่องมือ: เราใช้ C ++ ด้วยVisual Studio; เราใช้AccuRevเป็นSCCแต่ฉันคิดว่าประเภทของSCCไม่สำคัญที่นี่; เราใช้Araxis Mergeเพื่อทำการเปรียบเทียบจริงและการรวมไฟล์)

5
'ลิงก์แบบสแตติก' และ 'ลิงก์แบบไดนามิก' หมายถึงอะไร
ผมมักจะได้ยินคำว่า 'เชื่อมโยงแบบคง' และ 'เชื่อมโยงแบบไดนามิก' มักจะอยู่ในการอ้างอิงถึงรหัสที่เขียนในC , C ++หรือC # พวกเขาคืออะไรพวกเขากำลังพูดถึงอะไรกันแน่และพวกเขากำลังเชื่อมโยงอะไรกัน?

4
ข้อผิดพลาด: ข้ามไปที่ป้ายกำกับกรณีและปัญหา
ฉันเขียนโปรแกรมที่เกี่ยวข้องกับการใช้คำสั่ง switch ... อย่างไรก็ตามในการรวบรวมมันแสดง: ข้อผิดพลาด: ข้ามไปที่ป้ายกำกับกรณีและปัญหา ทำไมถึงทำเช่นนั้น? #include <iostream> #include <cstdlib> #include <fstream> #include <string> using namespace std; class contact { public: string name; int phonenumber; string address; contact() { name= "Noname"; phonenumber= 0; address= "Noaddress"; } }; int main() { contact *d; d = new contact[200]; string name,add; int …
229 c++ 


4
ฉันควรใช้ตัวชี้ประเภทใดเมื่อใด
ตกลงดังนั้นครั้งสุดท้ายที่ฉันเขียน C ++ เพื่อหาเลี้ยงชีพ std::auto_ptrคือ std lib ทั้งหมดที่มีอยู่และboost::shared_ptrเป็นความเดือดดาลทั้งหมด ฉันไม่เคยมองไปที่การเพิ่มประเภทตัวชี้อัจฉริยะอื่น ๆ ฉันเข้าใจว่าตอนนี้ C ++ 11 มีการเพิ่มประเภทบางอย่าง แต่ไม่ใช่ทั้งหมด ดังนั้นใครบางคนจึงมีอัลกอริทึมง่าย ๆ ในการพิจารณาว่าจะใช้ตัวชี้สมาร์ทตัวไหน ควรรวมถึงคำแนะนำเกี่ยวกับพอยน์เตอร์พอยน์เตอร์ (พอยน์เตอร์ดิบเช่นT*) และสมาร์ทพอยน์เตอร์ที่เหลือ (บางอย่างเช่นนี้จะดีมาก)

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


10
มีการเปลี่ยนแปลงอะไรใหม่ใน C ++ 11
ฉันรู้ว่าอย่างน้อยหนึ่งของการเปลี่ยนแปลงใน C ++ 11 ที่จะทำให้เกิดรหัสเดิมบางส่วนที่จะหยุดการรวบรวม: แนะนำของในห้องสมุดมาตรฐานแทนที่กรณีเก่าexplicit operator bool() operator void*()ได้รับรหัสที่ว่านี้จะทำลายอาจเป็นรหัสที่ไม่ควรถูกต้องในสถานที่แรก แต่มันก็ยังคงเป็นการเปลี่ยนแปลงที่แตกหัก: โปรแกรมที่เคยใช้ไม่ถูกต้องอีกต่อไป มีการเปลี่ยนแปลงที่แตกหักอื่น ๆ อีกหรือไม่?
227 c++  c++11 

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