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

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


3
“ memory stomp” คืออะไร?
ฉันเพิ่งเจอบล็อกโพสต์นี้ซึ่งกล่าวถึง“ ความทรงจำที่ย่ำแย่” โปรแกรม C ++ ที่สามารถเหยียบหน่วยความจำได้อย่างง่ายดาย (สิ่งที่คุณอาจไม่เคยได้ยินมาก่อนหากคุณเกิดในโลกแห่งรหัสที่มีการจัดการ) และอันที่จริงฉันไม่เคยได้ยินมาก่อน! แล้วนี่คืออะไรความทรงจำเหยียบความทรงจำ เกิดขึ้นเมื่อใด

16
แนวทางปฏิบัติที่ดีที่สุดสำหรับการดำเนินการกะวงกลม (หมุน) ใน C ++
ตัวดำเนินการกะซ้ายและขวา (<< และ >>) มีอยู่แล้วใน C ++ อย่างไรก็ตามฉันไม่พบว่าฉันสามารถดำเนินการกะแบบวงกลมหรือหมุนได้อย่างไร สามารถดำเนินการเช่น "หมุนซ้าย" และ "หมุนขวา" ได้อย่างไร? หมุนขวาสองครั้งที่นี่ Initial --> 1000 0011 0100 0010 ควรส่งผลให้: Final --> 1010 0000 1101 0000 ตัวอย่างจะเป็นประโยชน์ (หมายเหตุบรรณาธิการ: วิธีทั่วไปหลายอย่างในการแสดงการหมุนใน C ต้องทนทุกข์ทรมานจากพฤติกรรมที่ไม่ได้กำหนดหากจำนวนการหมุนเป็นศูนย์หรือรวบรวมมากกว่าคำสั่งเครื่องหมุนเพียงครั้งเดียวคำตอบของคำถามนี้ควรบันทึกแนวทางปฏิบัติที่ดีที่สุด)

7
M_PI ทำงานร่วมกับ math.h แต่ไม่ใช่กับ cmath ใน Visual Studio
ฉันกำลังใช้ Visual Studio 2010 ฉันได้อ่านว่าใน C ++ มันจะดีกว่าที่จะใช้มากกว่า<cmath><math.h> แต่ในโปรแกรมฉันพยายามเขียน (แอปพลิเคชันคอนโซล Win32 โครงการว่างเปล่า) ถ้าฉันเขียน: #define _USE_MATH_DEFINES #include <math.h> มันรวบรวมในขณะที่ถ้าฉันเขียน #define _USE_MATH_DEFINES #include <cmath> มันล้มเหลวด้วย ข้อผิดพลาด C2065: 'M_PI': ตัวระบุที่ไม่ได้ประกาศ เป็นเรื่องปกติ? มันสำคัญหรือไม่ถ้าฉันใช้ cmath หรือ math.h? ถ้าใช่ฉันจะทำให้มันทำงานกับ cmath ได้อย่างไร? UPDATE : ถ้าฉันกำหนด _USE_MATH_DEFINES ใน GUI มันก็ใช้ได้ มีเงื่อนงำอะไรที่เกิดขึ้น?

12
C ++ Tuple เทียบกับโครงสร้าง
มีความแตกต่างระหว่างการใช้ a std::tupleและ data-only structหรือไม่? typedef std::tuple<int, double, bool> foo_t; struct bar_t { int id; double value; bool dirty; } จากสิ่งที่ฉันพบทางออนไลน์ฉันพบว่ามีความแตกต่างที่สำคัญสองประการstructคืออ่านได้มากขึ้นในขณะที่tupleมีฟังก์ชันทั่วไปมากมายที่สามารถใช้ได้ ควรมีความแตกต่างของประสิทธิภาพอย่างมีนัยสำคัญหรือไม่? นอกจากนี้เค้าโครงข้อมูลยังใช้งานร่วมกันได้ (หล่อสลับกัน)
96 c++  struct  tuples 

3
อะไรคือความแตกต่างระหว่าง "รวมไดเรกทอรี" และ "รวมไดเรกทอรีเพิ่มเติม"
ในคุณสมบัติคอนฟิกูเรชันของโครงการของฉันภายใต้ "ไดเรกทอรี VC ++" มีรายการ "รวมไดเรกทอรี" แต่ภายใต้ตัวเลือก "C / C ++" มีรายการอื่นที่เรียกว่า "Additional Include Directories" สิ่งเดียวกันเกิดขึ้นกับไดเรกทอรีไลบรารี สองรายการนี้แตกต่างกันอย่างไร?

5
จะระบุความชอบของไลบรารีพา ธ ได้อย่างไร?
ฉันกำลังรวบรวมโปรแกรม c ++ โดยใช้g++และld. ฉันมี.soไลบรารีที่ฉันต้องการใช้ระหว่างการเชื่อมโยง อย่างไรก็ตามมีไลบรารีที่มีชื่อเดียวกันอยู่/usr/local/libและldกำลังเลือกไลบรารีนั้นทับไลบรารีที่ฉันระบุโดยตรง ฉันจะแก้ไขปัญหานี้ได้อย่างไร? สำหรับตัวอย่างด้านล่างไฟล์ไลบรารีของฉันคือ/my/dir/libfoo.so.0. สิ่งที่ฉันลองแล้วไม่ได้ผล: คำสั่ง g ++ ของฉันคือ g++ -g -Wall -o my_binary -L/my/dir -lfoo bar.cpp เพิ่ม/my/dirไปยังจุดเริ่มต้นหรือจุดสิ้นสุดของ$PATHตัวแปร en` ของฉัน เพิ่ม/my/dir/libfoo.so.0เป็นอาร์กิวเมนต์ให้กับ g ++
96 c++  linker  g++ 

8
เหตุใดมาโครตัวประมวลผลล่วงหน้าจึงชั่วร้ายและทางเลือกอื่นคืออะไร?
ฉันถามเรื่องนี้มาตลอด แต่ไม่เคยได้รับคำตอบที่ดีเลย ฉันคิดว่าโปรแกรมเมอร์เกือบทุกคนก่อนที่จะเขียน "Hello World" คนแรกเคยพบวลีเช่น "มาโครไม่ควรใช้", "มาโครเป็นสิ่งชั่วร้าย" และอื่น ๆ คำถามของฉันคือ: ทำไม? ด้วย C ++ 11 ใหม่มีทางเลือกใหม่หลังจากผ่านไปหลายปีหรือไม่? ส่วนที่ง่ายคือเกี่ยวกับมาโครเช่น#pragmaซึ่งเป็นแพลตฟอร์มเฉพาะและคอมไพเลอร์เฉพาะและส่วนใหญ่มักมีข้อบกพร่องร้ายแรงเช่น#pragma onceนี้เกิดข้อผิดพลาดได้ง่ายในสถานการณ์สำคัญอย่างน้อย 2 สถานการณ์: ชื่อเดียวกันในเส้นทางที่แตกต่างกันและด้วยการตั้งค่าเครือข่ายและระบบไฟล์บางอย่าง แต่โดยทั่วไปแล้วมาโครและทางเลือกอื่น ๆ ในการใช้งานล่ะ?

12
รับที่อยู่ IP ของเครื่อง
คำถามนี้เกือบจะเหมือนกับคำถามที่ถามก่อนหน้านี้Get the IP Address of local computer -Question แต่ผมต้องการที่จะหาที่อยู่ IP (e) ของเครื่องลินุกซ์ ดังนั้น: วิธีทำผม - โปรแกรมในภาษา C ++ - ตรวจสอบที่อยู่ IP ของเซิร์ฟเวอร์ลินุกซ์ใบสมัครของฉันทำงานอยู่ใน เซิร์ฟเวอร์จะมีที่อยู่ IP อย่างน้อยสองแห่งและฉันต้องการที่อยู่เฉพาะ (ที่อยู่ในเครือข่ายที่กำหนด (ที่อยู่สาธารณะ)) ฉันแน่ใจว่ามีฟังก์ชั่นง่ายๆที่จะทำ แต่ที่ไหนล่ะ เพื่อให้สิ่งต่างๆชัดเจนขึ้น: เซิร์ฟเวอร์จะมี "localhost": 127.0.0.1 อย่างชัดเจน เซิร์ฟเวอร์จะมีที่อยู่ IP ภายใน (การจัดการ): 172.16.xx เซิร์ฟเวอร์จะมีที่อยู่ IP ภายนอก (สาธารณะ): 80.190.xx ฉันต้องการค้นหาที่อยู่ IP ภายนอกเพื่อผูกแอปพลิเคชันของฉันเข้ากับมัน เห็นได้ชัดว่าฉันสามารถเชื่อมโยงกับ INADDR_ANY ได้ …

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

9
ฉันจะค้นหา / ค้นหาและแทนที่ในสตริงมาตรฐานได้อย่างไร
มีวิธีแทนที่การเกิดขึ้นทั้งหมดของสตริงย่อยด้วยสตริงอื่นstd::stringหรือไม่? ตัวอย่างเช่น: void SomeFunction(std::string& str) { str = str.replace("hello", "world"); //< I'm looking for something nice like this }
95 c++  replace  std 

6
Visual Studio ค้นหาไฟล์ส่วนหัว C ++ ที่ไหน
ฉันตรวจสอบสำเนาของแอปพลิเคชัน C ++ จาก SourceForge (HoboCopy หากคุณสงสัย) และพยายามรวบรวม Visual Studio บอกฉันว่าไม่พบไฟล์ส่วนหัวเฉพาะ ฉันพบไฟล์ในแผนผังซอร์ส แต่ฉันต้องวางไว้ที่ไหนเพื่อที่จะพบเมื่อคอมไพล์ มีไดเรกทอรีพิเศษหรือไม่?

8
vector :: at กับ vector :: operator []
ฉันรู้ว่าat()มันช้ากว่า[]เนื่องจากการตรวจสอบขอบเขตซึ่งจะกล่าวถึงในคำถามที่คล้ายกันเช่นC ++ Vector ที่ / [] ความเร็วของตัวดำเนินการ หรือ:: std :: vector :: at () vs operator [] << ผลลัพธ์ที่น่าประหลาดใจ !! ช้าลง 5 ถึง 10 เท่า / เร็วขึ้น! . ฉันไม่เข้าใจว่าat()วิธีนี้ดีสำหรับอะไร ถ้าฉันมีเวกเตอร์ธรรมดา ๆ แบบนี้: std::vector<int> v(10);และฉันตัดสินใจที่จะเข้าถึงองค์ประกอบของมันโดยใช้at()แทน[]ในสถานการณ์เมื่อฉันมีดัชนีiและฉันไม่แน่ใจว่ามันอยู่ในขอบเขตเวกเตอร์หรือไม่มันบังคับให้ฉันรวมมันด้วยการลองจับ บล็อก : try { v.at(i) = 2; } catch (std::out_of_range& oor) { ... } แม้ว่าฉันจะสามารถรับพฤติกรรมเดียวกันได้โดยใช้size()และตรวจสอบดัชนีด้วยตัวเองซึ่งดูเหมือนง่ายและสะดวกมากสำหรับฉัน: if …
95 c++  stl  stdvector 

8
ส่งคืนวัตถุ“ NULL” หากไม่พบผลการค้นหา
ฉันค่อนข้างใหม่กับ C ++ ดังนั้นฉันจึงมักจะออกแบบด้วย Java-isms จำนวนมากในขณะที่ฉันเรียนรู้ อย่างไรก็ตามใน Java ถ้าผมมีระดับด้วย 'ค้นหา' วิธีการที่จะกลับวัตถุTจากที่ตรงกับพารามิเตอร์ที่เฉพาะเจาะจงที่ผมจะกลับมาที่และวัตถุถ้าวัตถุไม่พบในคอลเลกชันที่ฉันจะกลับมาCollection< T > nullจากนั้นในฟังก์ชันการโทรของฉันฉันจะตรวจสอบif(tResult != null) { ... } ใน C ++ ฉันพบว่าฉันไม่สามารถคืนnullค่าได้หากไม่มีวัตถุ ฉันแค่ต้องการส่งคืน 'ตัวบ่งชี้' ประเภท T ที่แจ้งฟังก์ชันการโทรว่าไม่พบวัตถุ ฉันไม่ต้องการโยนข้อยกเว้นเพราะมันไม่ใช่สถานการณ์พิเศษจริงๆ นี่คือลักษณะของรหัสของฉันในตอนนี้: class Node { Attr& getAttribute(const string& attribute_name) const { //search collection //if found at i return attributes[i]; //if not found …

12
การจัดการการพึ่งพา Maven เหมือนสำหรับ C ++? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ สมมติว่าฉันมีโปรเจ็กต์ C ++ ที่แยกออกเป็นโปรเจ็กต์ย่อยหลายโปรเจ็กต์ โครงการย่อยทั้งหมดสร้าง DLL และทีมนักพัฒนาที่แตกต่างกันทำงานในแต่ละโครงการย่อย ตอนนี้ถ้าฉันต้องการสร้างโครงการหลักมีวิธีหลีกเลี่ยงไม่ให้สร้างโครงการย่อยทั้งหมดด้วยตัวเองหรือไม่? ในระยะสั้นฉันกำลังมองหาสิ่งที่จัดการการพึ่งพา (เช่นสำหรับไฟล์ไบนารีและส่วนหัว) ในลักษณะเดียวกับที่ Maven ทำกับ Java ในความเป็นจริงฉันพยายามใช้ Maven สำหรับสิ่งนี้ แต่ค่อนข้างยุ่งยากเพราะฉันต้องสร้างแพ็คเกจด้วยตนเองและค่อนข้างบ่อย Maven พลาดที่จะรับการเปลี่ยนแปลงล่าสุด นอกจากนี้การเรียกใช้การรวบรวมนั้นเป็นเรื่องแฮ็คเล็กน้อยเนื่องจากฉันต้องเรียก NAnt จากภายใน Maven (ฉันใช้คุณสมบัติของ NAnt เพื่อสร้างโซลูชัน Visual Studio โดยตรง) คำแนะนำและแนวคิดเกี่ยวกับวิธีการทำสิ่งนี้หรือไม่?

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