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

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

5
สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไขบนสมาชิกคลาสแบบคงที่
ใส่ง่ายมาก: ฉันมีคลาสที่ประกอบด้วยสมาชิกสาธารณะแบบคงที่เป็นส่วนใหญ่ดังนั้นฉันจึงสามารถจัดกลุ่มฟังก์ชันที่คล้ายกันเข้าด้วยกันซึ่งยังต้องถูกเรียกจากคลาส / ฟังก์ชันอื่น ๆ อย่างไรก็ตามฉันได้กำหนดตัวแปรถ่านที่ไม่ได้ลงชื่อแบบคงที่สองตัวแปรในขอบเขตสาธารณะของคลาสของฉันเมื่อฉันพยายามแก้ไขค่าเหล่านี้ในตัวสร้างคลาสเดียวกันฉันได้รับข้อผิดพลาด "สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไข" ในการคอมไพล์ class test { public: static unsigned char X; static unsigned char Y; ... test(); }; test::test() { X = 1; Y = 2; } ฉันยังใหม่กับ C ++ ดังนั้นฉันจึงเป็นเรื่องง่าย ทำไมฉันทำไม่ได้
129 c++  class  static  members 

5
การเข้าถึงสมาชิกสหภาพที่ไม่ได้ใช้งานและพฤติกรรมที่ไม่ได้กำหนด?
ฉันรู้สึกว่าการเข้าถึงไฟล์ unionสมาชิกนอกเหนือจากชุดสุดท้ายคือ UB แต่ดูเหมือนว่าฉันจะไม่พบข้อมูลอ้างอิงที่มั่นคง (นอกเหนือจากคำตอบที่อ้างว่าเป็น UB แต่ไม่ได้รับการสนับสนุนจากมาตรฐาน) ดังนั้นพฤติกรรมที่ไม่ได้กำหนดหรือไม่?

4
std :: function และ std :: bind: คืออะไรและควรใช้เมื่อใด
ฉันรู้ว่าสิ่ง functors และเมื่อจะใช้พวกเขาด้วยstdอัลกอริทึม แต่ฉันยังไม่เข้าใจสิ่งที่ Stroustrup กล่าวเกี่ยวกับพวกเขาในC ++ 11 คำถามที่พบบ่อย ทุกคนสามารถอธิบายสิ่งที่std::bindและstd::functionเป็นเมื่อพวกเขาควรจะนำมาใช้และให้ตัวอย่างสำหรับมือใหม่?

9
คอมไพเลอร์จะเริ่มต้นหน่วยความจำเป็น 0xCD, 0xDD และอื่น ๆ บน malloc / free / new / delete เมื่อใดและทำไม
ฉันรู้ว่าบางครั้งคอมไพเลอร์จะเริ่มต้นหน่วยความจำด้วยรูปแบบบางอย่างเช่น0xCDและ0xDD. สิ่งที่ฉันอยากรู้คือจะเกิดขึ้นเมื่อไหร่และทำไม เมื่อไหร่ สิ่งนี้เฉพาะสำหรับคอมไพเลอร์ที่ใช้หรือไม่? ทำmalloc/newและfree/deleteทำงานในลักษณะเดียวกันในเรื่องนี้หรือไม่? เป็นแพลตฟอร์มเฉพาะหรือไม่? มันจะเกิดขึ้นบนระบบปฏิบัติการอื่นเช่นLinuxหรือVxWorks? ทำไม ความเข้าใจของฉันคือสิ่งนี้เกิดขึ้นเฉพาะในWin32การกำหนดค่าการดีบักและใช้เพื่อตรวจจับการใช้หน่วยความจำมากเกินไปและเพื่อช่วยคอมไพลเลอร์ตรวจจับข้อยกเว้น คุณช่วยยกตัวอย่างที่ใช้ได้จริงว่าการเริ่มต้นนี้มีประโยชน์อย่างไร ฉันจำได้ว่าอ่านบางอย่าง (อาจอยู่ใน Code Complete 2) โดยบอกว่าเป็นการดีที่จะเริ่มต้นหน่วยความจำเป็นรูปแบบที่รู้จักเมื่อจัดสรรและรูปแบบบางอย่างจะทริกเกอร์การขัดจังหวะWin32ซึ่งจะส่งผลให้มีข้อยกเว้นที่แสดงในดีบักเกอร์ พกพาสะดวกขนาดนี้?


4
"const" ใน C ++ มีการใช้งานอย่างไร
ในฐานะที่เป็นสามเณร c ++ Programmer constมีโครงสร้างบางอย่างที่มองยังคงเป็นอย่างปิดบังให้ฉันหนึ่งของเหล่านี้เป็น คุณสามารถใช้มันได้ในหลาย ๆ ที่และมีเอฟเฟกต์ต่าง ๆ มากมายซึ่งแทบจะเป็นไปไม่ได้เลยที่ผู้เริ่มต้นจะมีชีวิต กูรู C ++ บางคนจะอธิบายการใช้งานที่หลากหลายตลอดไปหรือไม่และ / หรือทำไมไม่ใช้?
129 c++  const 

11
อะไรคือสิ่งที่ดีกว่ารายการ adjacency หรือเมทริกซ์ adjacency สำหรับปัญหากราฟใน C ++?
อะไรคือสิ่งที่ดีกว่ารายการ adjacency หรือเมทริกซ์ adjacency สำหรับปัญหากราฟใน C ++ ข้อดีข้อเสียแต่ละข้อเป็นอย่างไร?

2
ตัวดำเนินการลูกศร (->) ในส่วนหัวของฟังก์ชัน
ฉันเจอรหัสต่อไปนี้: template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) { return a+b; } มีสิ่งหนึ่งที่ฉันไม่เข้าใจ: ฉันจะทราบได้อย่างไรว่าตัวดำเนินการลูกศร ( ->) หมายถึงอะไรในส่วนหัวของฟังก์ชัน ฉันเดาด้วยเหตุผลล้วนๆว่า->โอเปอเรเตอร์กำหนดประเภทซึ่งautoจะอนุมานได้ แต่ฉันต้องการตรงนี้ ฉันไม่พบข้อมูลใด ๆ
129 c++  c++11  auto  decltype 

8
ตัวดำเนินการ << ควรดำเนินการในฐานะเพื่อนหรือเป็นฟังก์ชันของสมาชิก?
นั่นคือคำถามโดยพื้นฐานแล้วมีวิธีที่ "ถูกต้อง" ในการนำไปใช้operator&lt;&lt;หรือไม่? อ่านสิ่งนี้ฉันจะเห็นว่าสิ่งที่ชอบ: friend bool operator&lt;&lt;(obj const&amp; lhs, obj const&amp; rhs); เป็นที่ต้องการของบางสิ่งเช่น ostream&amp; operator&lt;&lt;(obj const&amp; rhs); แต่ฉันไม่สามารถเข้าใจได้ว่าทำไมฉันจึงควรใช้อย่างใดอย่างหนึ่ง กรณีส่วนตัวของฉันคือ: friend ostream &amp; operator&lt;&lt;(ostream &amp;os, const Paragraph&amp; p) { return os &lt;&lt; p.to_str(); } แต่ฉันอาจจะทำได้: ostream &amp; operator&lt;&lt;(ostream &amp;os) { return os &lt;&lt; paragraph; } ฉันควรใช้เหตุผลใดในการตัดสินใจนี้ หมายเหตุ : Paragraph::to_str = (return …


9
วัตถุประสงค์ของลำดับ Trigraph ใน C ++?
ตามมาตรฐาน C ++ '03 2.3 / 1: ก่อนที่การประมวลผลอื่น ๆ จะเกิดขึ้นการเกิดขึ้นของหนึ่งในลำดับต่อไปนี้ของอักขระสามตัวต่อไปนี้ ("ลำดับตรีโกณมิติ") จะถูกแทนที่ด้วยอักขระเดี่ยวที่ระบุในตารางที่ 1 ---------------------------------------------------------------------------- | trigraph | replacement | trigraph | replacement | trigraph | replacement | ---------------------------------------------------------------------------- | ??= | # | ??( | [ | ??&lt; | { | | ??/ | \ | ??) | ] | …
128 c++  c++03  trigraphs 

11
ใครเป็นผู้สร้าง / ออกแบบ IOStream ของ C ++ และจะยังถือว่าได้รับการออกแบบมาอย่างดีตามมาตรฐานปัจจุบันหรือไม่ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่? อัปเดตคำถามเพื่อให้สามารถตอบพร้อมข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ก่อนอื่นอาจดูเหมือนว่าฉันกำลังขอความคิดเห็นส่วนตัว แต่นั่นไม่ใช่สิ่งที่ฉันตามมา ฉันชอบที่จะได้ยินข้อโต้แย้งที่มีเหตุผลในหัวข้อนี้ ในความหวังในการได้รับข้อมูลเชิงลึกบางเป็นวิธีการกรอบลำธาร / อนุกรมที่ทันสมัยควรจะได้รับการออกแบบที่ฉันเพิ่งได้ตัวเองสำเนาของหนังสือc ++ มาตรฐาน IOStreams และตำแหน่งที่ตั้งโดย Angelika แลงเกอร์และเคลาส์ Kreft ฉันคิดว่าถ้า IOStreams ไม่ได้รับการออกแบบมาอย่างดีมันจะไม่ทำให้มันอยู่ในไลบรารีมาตรฐาน C ++ ตั้งแต่แรก หลังจากได้อ่านส่วนต่างๆของหนังสือเล่มนี้ฉันเริ่มมีข้อสงสัยว่า IOStreams สามารถเปรียบเทียบกับเช่น STL จากมุมมองทางสถาปัตยกรรมโดยรวมได้หรือไม่ อ่านเช่นบทสัมภาษณ์ของ Alexander Stepanov ("นักประดิษฐ์" ของ STL)เพื่อเรียนรู้เกี่ยวกับการตัดสินใจในการออกแบบบางอย่างที่เข้าสู่ STL สิ่งที่ทำให้ฉันประหลาดใจเป็นพิเศษ : ดูเหมือนว่าจะไม่ทราบว่าใครเป็นผู้รับผิดชอบการออกแบบโดยรวมของ IOStreams (ฉันชอบอ่านข้อมูลพื้นฐานเกี่ยวกับเรื่องนี้ - มีใครรู้แหล่งข้อมูลดีๆบ้างไหม); เมื่อคุณเจาะลึกลงไปใต้พื้นผิวของ IOStreams ในทันทีเช่นหากคุณต้องการขยาย …
128 c++  iostream 

30
จะแปลงตัวแปรประเภท enum เป็นสตริงได้อย่างไร?
จะทำให้ printf แสดงค่าของตัวแปรที่เป็น enum ได้อย่างไร? ตัวอย่างเช่น: typedef enum {Linux, Apple, Windows} OS_type; OS_type myOS = Linux; และสิ่งที่ฉันต้องการก็คือ printenum(OS_type, "My OS is %s", myOS); ซึ่งต้องแสดงสตริง "Linux" ไม่ใช่จำนวนเต็ม ฉันคิดว่าก่อนอื่นฉันต้องสร้างอาร์เรย์ของสตริงที่มีดัชนีค่า แต่ฉันไม่รู้ว่านั่นเป็นวิธีที่สวยงามที่สุดที่จะทำหรือไม่ เป็นไปได้หรือไม่
128 c++  c  preprocessor  ansi-c 

16
จำนวนเต็มเป็นสตริงเลขฐานสิบหกใน C ++
ฉันจะแปลงจำนวนเต็มเป็นสตริงฐานสิบหกในC ++ ได้อย่างไร ฉันสามารถหาวิธีทำได้ แต่ส่วนใหญ่ดูเหมือนจะมุ่งเป้าไปที่ C ดูเหมือนจะไม่มีวิธีดั้งเดิมที่จะทำใน C ++ มันเป็นปัญหาที่ค่อนข้างง่าย ฉันมีสิ่งintที่ฉันต้องการแปลงเป็นสตริงฐานสิบหกสำหรับการพิมพ์ในภายหลัง
128 c++  decimal  hex  int 

5
วิธีการแปลงประเภทเส้นทางการเพิ่มเป็นสตริง
สวัสดีตอนนี้ฉันมีโปรแกรมที่ได้รับเส้นทางแบบเต็มของตำแหน่งของไฟล์และใส่ลงในตัวแปรประเภท: boost :: filesystem2 :: path ฉันได้ค้นหาวิธีการทำสิ่งนี้และพบว่าการใช้: string result1 = boost::filesystem::basename (myPath) จะแปลงเส้นทางเป็นสตริง แต่จะแปลงเฉพาะชื่อไฟล์เท่านั้น (เช่นถ้าพา ธ เป็น "C: \ name \ bobsAwesomeWordDoc.docx" ก็จะส่งคืน "bobsAwesomeWordDoc") ฉันพบสิ่งต่อไปนี้เกี่ยวกับวิธีการแปลงเส้นทางทั้งหมดเป็นสตริง แต่ฉันไม่รู้วิธีนำไปใช้ในโปรแกรมของฉัน ฉันได้ลองหลายวิธี แต่ฉันได้รับข้อผิดพลาดในการแปลง const std :: string &amp; string (): รูทีนนี้จะส่งคืนสำเนาของสตริงที่เส้นทางถูกเริ่มต้นด้วยการจัดรูปแบบตามกฎไวยากรณ์ของพา ธ (พบที่นี่ ) ฉันเหนื่อย: string result1 = string&amp; (myPath); และรูปแบบอื่น ๆ อีกเล็กน้อย
128 c++  boost  path 

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