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

คำถามเกี่ยวกับ C ++ ซึ่งเป็นภาษาการเขียนแบบสแตติกแบบหลายกระบวนทัศน์รวบรวมภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไป

2
Bitwise-OR เทียบกับการเพิ่มค่าสถานะ
ฉันเคยเห็นคนอื่นใช้ Bitwise-OR เพื่อรวมแฟล็กก่อนหน้านี้: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN | JUMP | SHOOT; นั่นเป็นวิธีที่ฉันทำ แต่ฉันยังเห็นบางอย่าง (ไม่มาก) รวมธงโดยใช้การเพิ่ม: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN + JUMP + SHOOT; อันไหน "อ่าน" มากกว่า? (อันไหนที่คุณคิดว่าคนอื่นจะจำได้?) วิธี "มาตรฐาน" ในการทำคืออะไร? …
16 c++  operators 

2
มีข้อได้เปรียบในการจัดการบิตของ c-style มากกว่า std :: bitset หรือไม่?
ฉันทำงานเฉพาะใน C ++ 11/14 และมักจะประจบประแจงเมื่อฉันเห็นรหัสเช่นนี้ std::int64_t mArray; mArray |= someMask << 1; นี่เป็นเพียงตัวอย่างเท่านั้น ฉันกำลังพูดถึงการจัดการบิตที่ชาญฉลาดโดยทั่วไป ใน C ++ มีจุดใดจริง ๆ หรือไม่ ข้างต้นคือการแปรปรวนของจิตใจและข้อผิดพลาดได้ง่ายในขณะที่ใช้std::bitsetช่วยให้คุณ: ปรับเปลี่ยนขนาดของstd::bitsetสิ่งที่ต้องการได้ง่ายขึ้นโดยการปรับพารามิเตอร์เทมเพลตและให้การใช้งานสามารถจัดการส่วนที่เหลือและ ใช้เวลาน้อยลงในการหาว่าเกิดอะไรขึ้น (และอาจทำผิดพลาด) และเขียนstd::bitsetในลักษณะที่คล้ายกับstd::arrayหรือบรรจุข้อมูลอื่น ๆ คำถามของฉันคือ; มีเหตุผลที่จะไม่ใช้std::bitsetกับประเภทดั้งเดิมอื่น ๆ นอกเหนือจากความเข้ากันได้ย้อนหลัง?

4
ทำไมโปรแกรมเมอร์บางคนจัดหมวดหมู่ C, Python, C ++ แตกต่างกันอย่างไร - เกี่ยวกับระดับ
ฉันกำลังเรียนหลักสูตรเบื้องต้นเกี่ยวกับหลามและผู้สอนบอกว่าหลามเป็นภาษาระดับสูงและ C และ C ++ เป็นภาษาระดับต่ำ มันแค่ทำให้สับสน ฉันคิดว่า C, C ++, Python, Java และอื่น ๆ เป็นภาษาระดับสูงทั้งหมด ฉันอ่านคำถามที่ stackoverflow ใน C, C ++ และอื่น ๆ พวกเขาดูเหมือนจะอ้างถึงภาษาเหล่านั้นในระดับสูง ฉันคิดว่าโปรแกรมเมอร์บางคนใช้คำเหล่านั้นสลับกันได้

6
การใช้คอมไพเลอร์ C ++ ที่แตกต่างกันและเวอร์ชันภาษาเมื่อพัฒนาไฟล์ปฏิบัติการเดี่ยว
บริษัท ของเราจะซื้อซอร์สโค้ดขนาดใหญ่และซับซ้อนมากสำหรับการสื่อสารผ่านดาวเทียม มันถูกเข้ารหัสใน C ++ และเราจะใส่รหัสเพิ่มเติมเข้าไปใน C ++ เชื่อมโยงรหัสของเรากับรหัสที่ซื้อไปยังหน่วยที่ปฏิบัติการได้เพียงหน่วยเดียว จำเป็นหรือไม่ที่เราจะใช้คอมไพเลอร์รุ่นเดียวกันและคอมไพเลอร์รุ่นเดียวกันกับที่ใช้ในการพัฒนารหัสที่ซื้อมา? จำเป็นหรือไม่ที่เราจะต้องใช้ C ++ รุ่นเดียวกันกับรหัสที่ซื้อมา? หากไม่ได้ใช้ 2014 เรา_might_ต้องการใช้คุณลักษณะบางอย่างของมัน แต่ไม่ใช่หากมีปัญหาในการผสมเวอร์ชันที่แตกต่างกัน แน่นอนว่าในทางทฤษฎีมันไม่ควรมีความสำคัญโดยเฉพาะอย่างยิ่งรุ่นภาษา แต่เป็นไปได้ว่าคอมไพเลอร์รุ่นต่าง ๆ จะสร้างรหัสวัตถุที่แตกต่างกันซึ่งอาจนำไปสู่ความแตกต่างของเวลาเป็นต้น เราควรระวังอะไรบ้าง?
15 c++ 

4
size_t หรือ int สำหรับส่วนข้อมูลดัชนี ฯลฯ
ใน C ++, size_t(หรืออย่างถูกต้องมากขึ้นT::size_typeซึ่งเป็น "มักจะ" size_t; เช่นunsignedประเภท) จะใช้เป็นค่าตอบแทนสำหรับsize()อาร์กิวเมนต์เพื่อoperator[]ฯลฯ (ดูstd::vector, et. al.) ในทางตรงกันข้ามภาษา. NET ใช้int(และเลือกlong) เพื่อจุดประสงค์เดียวกัน ในความเป็นจริงที่สอดคล้องกับ CLS ภาษาไม่จำเป็นต้องสนับสนุนประเภทที่ไม่ได้ลงชื่อ เนื่องจาก. NET นั้นใหม่กว่า C ++ มีบางสิ่งที่บอกฉันว่าอาจมีปัญหาในการใช้งานunsigned intแม้กระทั่งสิ่งที่ "ไม่สามารถ" เป็นลบได้เช่นดัชนีอาร์เรย์หรือความยาว C ++ เป็น "วัตถุทางประวัติศาสตร์" สำหรับความเข้ากันได้แบบย้อนหลังหรือไม่? หรือมีการแลกเปลี่ยนการออกแบบที่แท้จริงและสำคัญระหว่างสองแนวทาง เหตุใดเรื่องนี้ อืม ... ฉันควรใช้อะไรกับคลาสหลายมิติใหม่ใน C ++; size_tหรือint? struct Foo final // e.g., image, matrix, etc. { typedef …
15 c#  c++  array 

1
std :: vector <bool> มาได้อย่างไร
ทุกวันนี้นักพัฒนา C ++ ทุกคนยอมรับว่าstd::vector&lt;bool&gt;มันเป็นความผิดพลาดเพราะมันไม่ใช่การหลอกลวงและกรณีการใช้งานของมันนั้นทับซ้อนกับสิ่งเหล่านั้นstd::bitsetอยู่ดี คะแนนเป็นมาตรฐานได้อย่างไร มันเป็นความขัดแย้งในเวลา? อะไรคือข้อโต้แย้งหลักที่สนับสนุน?
15 c++  history  stl 

6
การจัดเรียงหน่วยความจำมีความสำคัญแค่ไหน? มันยังคงเป็นเรื่องสำคัญหรือไม่
จากช่วงเวลานี้ฉันได้ค้นหาและอ่านมากเกี่ยวกับการจัดตำแหน่งหน่วยความจำวิธีการทำงานและวิธีการใช้งาน บทความที่เกี่ยวข้องมากที่สุดที่ฉันได้พบในขณะนี้คือคนนี้ แต่ถึงอย่างนั้นฉันก็ยังมีคำถามบางอย่างเกี่ยวกับเรื่องนี้: ออกจากระบบฝังตัวเรามักจะมีหน่วยความจำขนาดใหญ่ในคอมพิวเตอร์ของเราที่ทำให้การจัดการหน่วยความจำน้อยลงมากฉันทำการปรับให้เหมาะสม แต่ตอนนี้มันเป็นสิ่งที่สามารถสร้างความแตกต่างได้ถ้าเราเปรียบเทียบโปรแกรมเดียวกันกับหรือ ไม่มีหน่วยความจำที่จัดเรียงใหม่และจัดตำแหน่ง? การจัดตำแหน่งหน่วยความจำมีข้อดีอื่น ๆ หรือไม่? ฉันอ่านบางแห่งว่า CPU ทำงานได้ดีขึ้น / เร็วขึ้นด้วยหน่วยความจำที่จัดเรียงเพราะใช้คำสั่งในการประมวลผลน้อยกว่า (หากคุณมีลิงค์สำหรับบทความ / เกณฑ์มาตรฐานเกี่ยวกับเรื่องนี้?) ในกรณีนี้ มีข้อดีมากกว่าสองอย่างนี้ไหม? ในลิงค์บทความที่บทที่ 5 ผู้เขียนพูดว่า: ระวัง: ใน C ++ คลาสที่ดูเหมือนว่า structs อาจผิดกฎนี้! (ไม่ว่าพวกเขาจะทำหรือไม่ขึ้นอยู่กับว่าคลาสพื้นฐานและฟังก์ชั่นสมาชิกเสมือนมีการใช้งานอย่างไรและแตกต่างกันตามคอมไพเลอร์) บทความส่วนใหญ่พูดคุยเกี่ยวกับโครงสร้าง แต่การประกาศตัวแปรท้องถิ่นได้รับผลกระทบจากความต้องการนี้เช่นกัน? คุณเคยคิดบ้างไหมว่าการจัดเรียงหน่วยความจำทำงานอย่างไรใน C ++ เนื่องจากดูเหมือนว่าจะมีความแตกต่างบ้างไหม? คำถามเดิมนี้มีคำว่า "การจัดตำแหน่ง" แต่ไม่ได้ให้คำตอบสำหรับคำถามข้างต้น

2
หนึ่งควรสืบทอด / สืบทอดมาจาก std :: exception?
ในขณะที่ออกแบบไลบรารี C ++ 'จริงจัง' ครั้งแรกของฉันฉันถามตัวเอง: มันเป็นสไตล์ที่ดีหรือไม่ที่จะได้รับการยกเว้นจากสิ่งstd::exceptionนั้น แม้หลังจากอ่านเสร็จ การออกแบบคลาสยกเว้น ข้อยกเว้น 'จำนวนที่ดี' ที่จะนำไปใช้กับห้องสมุดของฉันคืออะไร ฉันยังไม่แน่ใจ เพราะนอกเหนือจากการปฏิบัติทั่วไป (แต่อาจจะไม่ดี) ฉันจะถือว่าในฐานะผู้ใช้ห้องสมุดว่าฟังก์ชั่นห้องสมุดจะstd::exceptionแสดงเฉพาะเมื่อฟังก์ชั่นไลบรารีมาตรฐานล้มเหลวในการใช้งานไลบรารีและมันไม่สามารถทำอะไรได้เลย แต่ยังคงเมื่อเขียนรหัสโปรแกรมสำหรับฉันมันสะดวกมากและยัง IMHO std::runtime_errorดูดีเพียงแค่โยน ผู้ใช้ของฉันยังสามารถพึ่งพาส่วนต่อประสานขั้นต่ำที่กำหนดเช่นwhat()รหัสหรือ และตัวอย่างเช่นผู้ใช้ของฉันให้ข้อโต้แย้งที่ผิดพลาดสิ่งที่จะสะดวกกว่าการโยน a std::invalid_argumentใช่มั้ย ดังนั้นรวมกับการใช้งานยังร่วมกันของมาตรฐาน :: ข้อยกเว้นที่ฉันเห็นในรหัสผู้อื่น: ทำไมไม่ไปให้ดียิ่งขึ้นและได้รับมาจากชั้นยกเว้นของคุณเอง (เช่น lib_foo_exception) std::exceptionและจาก คิด?
15 c++  exceptions 

4
การจัดการพารามิเตอร์ในแอปพลิเคชัน OOP
ฉันกำลังเขียนแอปพลิเคชัน OOP ขนาดกลางใน C ++ เป็นวิธีฝึกหลักการ OOP ฉันมีหลายคลาสในโครงการของฉันและบางส่วนจำเป็นต้องเข้าถึงพารามิเตอร์การกำหนดค่าใช้งาน พารามิเตอร์เหล่านี้อ่านจากแหล่งต่าง ๆ ในระหว่างการเริ่มต้นแอปพลิเคชัน บางไฟล์ถูกอ่านจากไฟล์ปรับแต่งในผู้ใช้ที่บ้านบางคนเป็นอาร์กิวเมนต์บรรทัดคำสั่ง (argv) ConfigBlockดังนั้นผมจึงสร้างชั้นเรียน คลาสนี้อ่านแหล่งพารามิเตอร์ทั้งหมดและเก็บไว้ในโครงสร้างข้อมูลที่เหมาะสม ตัวอย่างคือชื่อพา ธ และชื่อไฟล์ที่ผู้ใช้สามารถเปลี่ยนได้ในไฟล์กำหนดค่าหรือ - --verbose CLI flag จากนั้นหนึ่งสามารถโทรConfigBlock.GetVerboseLevel()เพื่ออ่านพารามิเตอร์เฉพาะนี้ คำถามของฉัน: เป็นการดีหรือไม่ที่จะรวบรวมข้อมูลการกำหนดค่ารันไทม์ทั้งหมดในชั้นเดียว? จากนั้นชั้นเรียนของฉันต้องการเข้าถึงพารามิเตอร์เหล่านี้ทั้งหมด ฉันสามารถคิดหลายวิธีในการบรรลุเป้าหมายนี้ แต่ฉันไม่แน่ใจว่าควรใช้วิธีใด คอนสตรัคเตอร์ของคลาสสามารถอ้างอิงถึง ConfigBlock ของฉันได้ public: MyGreatClass(ConfigBlock &amp;config); หรือพวกเขาเพียงแค่รวมส่วนหัว "CodingBlock.h" ซึ่งมีคำจำกัดความของ CodingBlock ของฉัน: extern CodingBlock MyCodingBlock; จากนั้นไฟล์คลาส. cpp เท่านั้นที่ต้องรวมและใช้สิ่งที่ ConfigBlock ไฟล์. h ไม่แนะนำอินเทอร์เฟซนี้กับผู้ใช้ของคลาส อย่างไรก็ตามอินเทอร์เฟซสำหรับ …

3
การเขียนโปรแกรมแบบไม่เน้นวัตถุในภาษาเชิงวัตถุ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เมื่อเร็ว ๆ นี้ผมได้รับมอบหมายงานของการสร้างเครื่องคิดเลขที่มีฟังก์ชั่นการบวกลบคูณหารและพลังงานโดยใช้โปรแกรมเชิงวัตถุ ฉันทำภารกิจนี้สำเร็จ แต่หลังจากนั้นผมปรับผังโปรแกรมทั้งหมดโดยไม่ต้องใช้ Object Oriented เทคนิค / วิธีการ สิ่งที่ฉันสังเกตเห็นว่าความยาวรหัสของฉันลดลงอย่างมากและค่อนข้างเข้าใจได้ ดังนั้นคำถามของฉันที่นี่คือเมื่อฉันควรใช้การเขียนโปรแกรมเชิงวัตถุ? การสร้างโปรแกรมโดยไม่ใช้การวางแนววัตถุในภาษาเชิงวัตถุนั้นใช่ไหม กรุณาช่วยฉันออกจากที่นี่ PS: ฉันไม่ได้ขอให้ที่นี่เพื่อบอกข้อดีของการเขียนโปรแกรมเชิงวัตถุมากกว่าการเขียนโปรแกรมตามขั้นตอน

6
ทดสอบหน่วยวิธีส่วนตัวใน c ++ โดยใช้คลาสเพื่อน
ฉันรู้ว่านี่เป็นวิธีปฏิบัติที่ถกเถียงกัน แต่สมมติว่านี่เป็นตัวเลือกที่ดีที่สุดสำหรับฉัน ฉันสงสัยเกี่ยวกับเทคนิคที่แท้จริงในการทำสิ่งนี้ วิธีการที่ฉันเห็นคือ: 1) สร้างคลาสเพื่อนที่เป็นคลาสที่ฉันต้องการทดสอบ 2) ในคลาสเพื่อนสร้างวิธีสาธารณะที่เรียกวิธีส่วนตัวของคลาสที่ทดสอบ 3) ทดสอบวิธีสาธารณะของเพื่อนชั้น นี่เป็นตัวอย่างง่ายๆที่แสดงให้เห็นถึงขั้นตอนข้างต้น: #include &lt;iostream&gt; class MyClass { friend class MyFriend; // Step 1 private: int plus_two(int a) { return a + 2; } }; class MyFriend { public: MyFriend(MyClass *mc_ptr_1) { MyClass *mc_ptr = mc_ptr_1; } int plus_two(int a) // Step …

2
ไหนดีกว่า: กลุ่ม getters หรือ 1 เมธอดที่มีพารามิเตอร์สตริงการเลือก?
โดเมนความรู้ของเราเกี่ยวข้องกับคนที่เดินข้ามแผ่นบันทึกความกดดันด้วยเท้าเปล่า เราทำการจดจำรูปภาพซึ่งส่งผลให้วัตถุของคลาส 'เท้า' หากเท้ามนุษย์ถูกจดจำในข้อมูลเซ็นเซอร์ มีการคำนวณหลายอย่างที่ต้องดำเนินการกับข้อมูลของเท้า ตอนนี้ API ตัวไหนจะดีกว่า: class Foot : public RecognizedObject { MaxPressureFrame getMaxPressureFrame(); FootAxis getFootAxis(); AnatomicalZones getAnatomicalZones(); // + similar getters for other calculations // ... } หรือ: class Foot : public RecognizedObject { virtual CalculationBase getCalculation(QString aName); // ... } ตอนนี้มีโปรและคอนแสตนท์จำนวนมากที่ฉันสามารถหาได้ แต่ฉันก็ไม่สามารถตัดสินใจได้ว่าอะไรคือสิ่งที่สำคัญที่สุด หมายเหตุนี่เป็นแอปพลิเคชั่นสำหรับผู้ใช้ไม่ใช่ไลบรารี่ซอฟต์แวร์ที่เราขาย คำแนะนำใด ๆ? โปรบางตัวสำหรับวิธีแรกอาจเป็น: …

7
ใน C และ C ++ วิธีการใดที่สามารถป้องกันการใช้งานมอบหมาย (=) โดยไม่ได้ตั้งใจโดยที่จำเป็นต้องมีความเท่าเทียมกัน (==)
ใน C และ C ++ มันง่ายมากที่จะเขียนโค้ดต่อไปนี้พร้อมกับข้อผิดพลาดร้ายแรง char responseChar = getchar(); int confirmExit = 'y' == tolower(responseChar); if (confirmExit = 1) { exit(0); } ข้อผิดพลาดคือคำสั่ง if ควรได้รับ: if (confirmExit == 1) ดังที่เขียนไว้มันจะออกทุกครั้งเนื่องจากการกำหนดconfirmExitตัวแปรเกิดขึ้นจากนั้นconfirmExitจะถูกใช้เป็นผลลัพธ์ของการแสดงออก มีวิธีที่ดีในการป้องกันข้อผิดพลาดประเภทนี้หรือไม่?

2
WinRT สามารถใช้งานได้จริงในขอบเขตหรือไม่?
Microsoft (ส่วนใหญ่Herb Sutter ) แนะนำให้ใช้เมื่อใช้ WinRT กับ C ++ / CX เพื่อให้ WinRT อยู่ในขอบเขตของแอปพลิเคชันและเก็บแกนหลักของแอปพลิเคชันที่เขียนด้วย ISO C ++ มาตรฐาน ฉันกำลังเขียนแอปพลิเคชันที่ฉันต้องการออกจากระบบพกพาดังนั้นฟังก์ชั่นหลักของฉันจึงถูกเขียนด้วยมาตรฐาน C ++ และตอนนี้ฉันกำลังพยายามเขียนส่วนหน้าแบบเมโทรโดยใช้ C ++ / CX อย่างไรก็ตามฉันมีปัญหาเล็กน้อยเกี่ยวกับวิธีการนี้ ตัวอย่างเช่นถ้าผมต้องการที่จะผลักดันเวกเตอร์ของผู้ใช้กำหนด c ++ ประเภทเพื่อการควบคุม XAML ListView ผมต้องห่อของฉันประเภทที่ผู้ใช้กำหนดใน WinRT ประเภทเตะ / Vector^ค่าให้มันถูกเก็บไว้ใน ด้วยวิธีการนี้ทำให้ฉันต้องทิ้งคลาส C ++ ส่วนใหญ่ไว้กับคลาส WinRT อย่างหลีกเลี่ยงไม่ได้ นี่เป็นครั้งแรกที่ฉันพยายามเขียนแอปพลิเคชันเนทีฟแบบพกพาใน C ++ การใช้ WinRT เป็นไปตามขอบเขตเช่นนี้จริงหรือไม่? …
15 c++  portability  winrt 

4
มันสมเหตุสมผลไหมที่จะเขียน build script ใน C ++?
ฉันใช้ CMake เพื่อสร้างโครงการ IDE / makefiles ของฉัน แต่ฉันยังต้องเรียก "สคริปต์" แบบกำหนดเองเพื่อจัดการไฟล์ที่คอมไพล์ของฉันหรือแม้แต่สร้างรหัส ในโครงการก่อนหน้านี้ฉันใช้ Python และมันก็โอเค แต่ตอนนี้ฉันมีปัญหาร้ายแรงในการจัดการการพึ่งพาจำนวนมากในสองโครงการขนาดใหญ่มากที่ฉันทำงานอยู่ดังนั้นฉันจึงต้องการลดการพึ่งพาทุกที่ มีคนแนะนำฉันให้ใช้ C ++ เพื่อเขียนสคริปต์สร้างของฉันแทนที่จะเพิ่มการพึ่งพาภาษาสำหรับสิ่งนั้น ชุดรูปแบบโครงการใช้ C ++ อยู่แล้วดังนั้นจึงมีข้อดีหลายประการที่ฉันเห็น: ในการสร้างโครงการทั้งหมดจะต้องใช้คอมไพเลอร์ C ++ และ CMake เท่านั้นไม่มีสิ่งอื่นใด (การอ้างอิงอื่น ๆ ทั้งหมดคือ C หรือ C ++) ความปลอดภัยประเภท C ++ (เมื่อใช้ C ++ ที่ทันสมัย) ทำให้ทุกอย่างง่ายขึ้นเพื่อให้ "ถูกต้อง"; เป็นภาษาที่ฉันรู้จักดีกว่าดังนั้นฉันจึงสบายใจได้แม้ว่าฉันจะสามารถเขียนรหัส Python ได้ดีก็ตาม ความเป็นไปได้ที่จะได้รับความเร็วในการประมวลผล (แต่ฉันไม่คิดว่ามันจะเข้าใจได้จริง); อย่างไรก็ตามฉันคิดว่าอาจมีข้อเสียบางอย่างและฉันไม่แน่ใจเกี่ยวกับผลกระทบที่แท้จริงเนื่องจากฉันยังไม่ได้ลอง: …

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