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

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

2
การแปลงวิธี C ++ เป็นฟังก์ชัน C ด้วยอาร์กิวเมนต์ตัวชี้เป็นรูปแบบที่ยอมรับได้หรือไม่
ฉันใช้ C ++ กับ ESP-32 เมื่อลงทะเบียนตัวจับเวลาฉันต้องทำสิ่งนี้: timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback); timer_args.arg = this; soundCallbackนี่โทรจับเวลา และสิ่งเดียวกันเมื่อลงทะเบียนงาน: xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle); ดังนั้นวิธีการเริ่มต้นในงานที่แยกจากกัน GCC เตือนฉันเสมอเกี่ยวกับการแปลงเหล่านี้ แต่ทำงานได้ตามแผนที่วางไว้ เป็นที่ยอมรับในรหัสการผลิตหรือไม่ มีวิธีที่ดีกว่าในการทำเช่นนี้?
16 c++  c  functions 

3
เมื่อใดที่ฉันควรใช้ string_view ในอินเทอร์เฟซ
ฉันใช้ห้องสมุดภายในที่ถูกออกแบบมาเพื่อเลียนแบบเสนอห้องสมุด C ++และในช่วงไม่กี่ปีที่ผ่านมาผมเห็นอินเตอร์เฟซที่เปลี่ยนจากการใช้เพื่อstd::stringstring_view ดังนั้นฉันจึงเปลี่ยนรหัสตามหน้าที่ให้สอดคล้องกับอินเทอร์เฟซใหม่ น่าเสียดายที่สิ่งที่ฉันต้องผ่านคือพารามิเตอร์ std :: string และสิ่งที่เป็นค่าส่งคืน std :: string ดังนั้นรหัสของฉันเปลี่ยนจากสิ่งนี้: void one_time_setup(const std::string & p1, int p2) { api_class api; api.setup (p1, special_number_to_string(p2)); } ถึง void one_time_setup(const std::string & p1, int p2) { api_class api; const std::string p2_storage(special_number_to_string(p2)); api.setup (string_view(&p1[0], p1.size()), string_view(&p2_storage[0], p2_storage.size())); } ฉันจริงๆไม่เห็นสิ่งที่เปลี่ยนแปลงนี้ซื้อฉันเป็นลูกค้าของ API นอกเหนือจากรหัสอื่น …

5
การใช้งานข้อยกเว้นในภาษา C ++
isocpp.org ข้อยกเว้น FAQระบุสถานะ อย่าใช้ Throw เพื่อระบุข้อผิดพลาดในการใช้งานฟังก์ชั่น ใช้ assert หรือกลไกอื่น ๆ เพื่อส่งกระบวนการไปยังดีบักเกอร์หรือเพื่อทำให้กระบวนการทำงานผิดพลาดและเก็บรวบรวมดัมพ์ของข้อผิดพลาดเพื่อให้นักพัฒนาทำการดีบัก ในทางกลับกันไลบรารีมาตรฐานจะกำหนด std :: logic_error และทั้งหมดเป็นอนุพันธ์ซึ่งดูเหมือนว่าฉันควรจะจัดการนอกเหนือจากสิ่งอื่น ๆ ข้อผิดพลาดในการเขียนโปรแกรม กำลังส่งสตริงว่างไปยัง std :: stof (จะโยน invalid_argument) ไม่ใช่ข้อผิดพลาดในการเขียนโปรแกรมหรือไม่? การส่งสตริงที่มีอักขระที่แตกต่างจาก '1' / '0' ถึง std :: bitset (จะส่ง invalid__chument) ไม่ใช่ข้อผิดพลาดในการเขียนโปรแกรมหรือไม่? กำลังเรียก std :: bitset :: set ด้วยดัชนีที่ไม่ถูกต้อง (จะโยน out_of_range) ไม่ใช่ข้อผิดพลาดในการเขียนโปรแกรมหรือไม่? หากสิ่งเหล่านี้ไม่ใช่ข้อผิดพลาดในการเขียนโปรแกรมที่จะทดสอบคืออะไร ตัวสร้างสตริงที่ใช้ std :: …
16 design  c++  exceptions 

5
C ++: ชั้นเรียนควรเป็นเจ้าของหรือสังเกตการอ้างอิงของมัน?
บอกว่าผมได้เรียนFoobarที่ใช้ (ขึ้นอยู่กับ) Widgetระดับ ในวันเฒ่าที่ดีWidgetwolud จะถูกประกาศให้เป็นสนามในFoobarหรืออาจจะเป็นตัวชี้ที่ฉลาดถ้าต้องการพฤติกรรม polymorphic และมันจะเริ่มต้นได้ใน constructor: class Foobar { Widget widget; public: Foobar() : widget(blah blah blah) {} // or std::unique_ptr<Widget> widget; public: Foobar() : widget(std::make_unique<Widget>(blah blah blah)) {} (…) }; และเราจะพร้อมทุกอย่างให้เรียบร้อย น่าเสียดายที่วันนี้เด็ก ๆ จาวาจะหัวเราะเยาะเราเมื่อพวกเขาเห็นมันและอย่างถูกต้องตามที่คู่รักFoobarและWidgetร่วมกัน วิธีแก้ปัญหานั้นง่ายมาก: ใช้การฉีดพึ่งพาเพื่อสร้างการพึ่งพาจากFoobarชั้นเรียน แต่แล้ว C ++ ก็บังคับให้เราคิดถึงการเป็นเจ้าของการพึ่งพา การแก้ปัญหาทั้งสามอยู่ในใจ: ตัวชี้ที่ไม่ซ้ำ class Foobar { std::unique_ptr<Widget> widget; …

6
เหตุใดเราจึงใส่ฟังก์ชันสมาชิกส่วนตัวไว้ในส่วนหัว
คำตอบสำหรับสาเหตุที่เราใส่ตัวแปรสมาชิกส่วนตัวในส่วนหัวของ C ++ คือขนาดของคลาสจะต้องเป็นที่รู้จักในจุดที่มีการประกาศอินสแตนซ์เพื่อให้คอมไพเลอร์สามารถสร้างรหัสที่เหมาะสมเกี่ยวกับการย้ายสแต็ก ทำไมเราต้องใส่สมาชิกส่วนบุคคลไว้ในหัว? แต่มีเหตุผลใดที่จะประกาศฟังก์ชั่นส่วนตัวในคำจำกัดความของชั้นเรียน? ทางเลือกจะเป็นสำนวน pimpl เป็นหลัก แต่ไม่มีทิศทางฟุ่มเฟือย คุณสมบัติภาษานี้เป็นมากกว่าข้อผิดพลาดในอดีตหรือไม่?
16 c++  history 

5
คุณสมบัติ C ++ ของทั้งทีม?
ใน C ++ คุณสมบัติเช่นข้อยกเว้นส่งผลกระทบต่อโปรแกรมทั้งหมดของคุณ: คุณสามารถปิดการใช้งานพวกเขาในโปรแกรมทั้งหมดของคุณหรือคุณต้องจัดการกับพวกเขาตลอดรหัสของคุณ ในฐานะที่เป็นบทความที่มีชื่อเสียง ในรายงาน C ++ทำให้มัน: ตอบโต้ส่วนที่ยากของข้อยกเว้นการเข้ารหัสไม่ใช่การขว้างและจับอย่างชัดเจน ส่วนที่ยากมากของการใช้ข้อยกเว้นคือการเขียนรหัสการแทรกแซงทั้งหมดในลักษณะที่ข้อยกเว้นโดยพลการสามารถแพร่กระจายจากไซต์ที่ส่งไปยังผู้จัดการของตนมาถึงอย่างปลอดภัยและไม่ทำให้ส่วนอื่น ๆ ของโปรแกรมเสียหายไปตลอดทาง เนื่องจากแม้จะมีการnewยกเว้นข้อยกเว้นทุกฟังก์ชั่นจะต้องให้ความปลอดภัยข้อยกเว้นขั้นพื้นฐาน - ยกเว้นว่าจะเรียกเฉพาะฟังก์ชั่นที่รับประกันว่าจะไม่มีข้อยกเว้น - เว้นแต่คุณจะปิดการใช้งานข้อยกเว้นทั้งหมดในโครงการทั้งหมดของคุณจนกว่าคุณจะปิดการใช้งานข้อยกเว้นโดยสิ้นเชิงในโครงการทั้งหมดของคุณ ดังนั้นข้อยกเว้นเป็นคุณลักษณะ "ทั้งโปรแกรม" หรือ "ทั้งทีม" เนื่องจากทุกคนในทีมต้องใช้ความเข้าใจ แต่ไม่ใช่ว่าคุณสมบัติ C ++ ทั้งหมดจะเป็นอย่างนั้นเท่าที่ฉันรู้ ตัวอย่างที่เป็นไปได้คือถ้าฉันไม่ได้รับเท็มเพลต แต่ฉันไม่ได้ใช้มันฉันจะยังสามารถเขียน C ++ ที่ถูกต้องได้หรือไม่? ฉันสามารถโทรsortหาอาเรย์ของจำนวนเต็มและเพลิดเพลินไปกับความได้เปรียบความเร็วที่น่าทึ่งของมัน C qsort(เพราะไม่มีตัวชี้ฟังก์ชั่นถูกเรียก) โดยไม่เสี่ยงต่อข้อบกพร่อง - หรือไม่? ดูเหมือนว่าเทมเพลตไม่ใช่ "ทั้งทีม" มีฟีเจอร์ C ++ อื่น ๆ ที่ส่งผลกระทบต่อรหัสที่ไม่ได้ใช้งานโดยตรงและเป็น "ทั้งทีม" หรือไม่? ฉันสนใจคุณสมบัติพิเศษที่ไม่มีใน C. …

2
ภาพรวมที่ดีที่สุดสำหรับกระบวนทัศน์ C ++ ที่ทันสมัย? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันเคยเขียน C ++ อย่างกว้างขวางระหว่าง 8 และ 10 ปีที่แล้ว ฉันได้ย้ายไปยัง C # ด้วยเหตุผลมืออาชีพ อย่างไรก็ตามบางครั้งฉันเห็นข้อความชอบ "หากคุณยังคงติดตามการอ้างอิงตัวชี้ด้วยตนเองคุณกำลังทำผิด" หรือ "C ++ มีความปลอดภัยอย่างสมบูรณ์แบบตราบใดที่คุณใช้แนวคิดสมัยใหม่เช่น RAII และไม่ได้จัดสรรหน่วยความจำด้วยตนเองเช่นนักพัฒนา C ที่กู้คืน" ทั้งสองเป็นขั้นตอนมาตรฐานเมื่อสิบปีที่แล้ว ฉันได้เห็นว่า C ++ ได้รับการปรับปรุงอย่างมากในช่วงเวลาที่ผ่านมา; โดยเฉพาะอย่างยิ่ง C ++ 0x ดูเหมือนจะมีความสามารถใหม่ ๆ แหล่งข้อมูลที่ดีที่สุดสำหรับโปรแกรมเมอร์ "C / old C ++" …

8
เหตุใด C ++ ยังคงเป็น“ ลูกผสม”
สำหรับคำถามที่เกี่ยวข้องจะได้รับการชี้แจงว่าทำไม C ++ เข้ากันไม่ได้กับ C ในหลาย ๆ ด้าน อย่างไรก็ตาม C ++ ยังคงเป็นภาษา "ไฮบริด" * และน่าเสียดายที่โปรแกรมเมอร์หลายคนยังถือว่า C ++ เป็น "C ที่มีสตรีมและสตริงในตัว" ผลลัพธ์นั้นเป็นโค้ดที่เขียนไม่ดีจริง ๆ ซึ่งไม่ใช่ทั้ง C ++ หรือ C. IMHO มันจะดีกว่าถ้าภาษา / คอมไพเลอร์บังคับให้โปรแกรมเมอร์ในระดับหนึ่งต้องเขียนโค้ดที่หรูหรากว่านี้ ดังนั้นมีเหตุผลในการรักษาไฮบริด C ++ (เช่น C ++ 0x และเวอร์ชันในอนาคต) ไฮบริด? * โดยไฮบริดฉันหมายถึงมันขึ้นอยู่กับโปรแกรมเมอร์ที่จะตัดสินใจว่าเขา / เธอจะใช้หรือไม่: สตริงมาตรฐานและสตรีม, คลาส, เนมสเปซอื่นที่ไม่ใช่ค่าเริ่มต้นเป็นต้น

9
จะจัดการโครงการ Linux / makefile ขนาดใหญ่ได้อย่างมีประสิทธิภาพได้อย่างไร
ฉันพัฒนาแอพพลิเคชั่น Windows ใน C ++ มานานกว่า 10 ปีแล้ว และเมื่อไม่นานมานี้ฉันเริ่มขุดลงไปในบางโครงการของ Linux และฉันก็ทนไม่ได้ว่าฉันเป็นคนที่ไม่ก่อผล ... ฉันเป็นผู้เรียนที่รวดเร็วและฉันใช้ Linux เป็นแพลตฟอร์มหลักมาระยะหนึ่งแล้ว และฉันรู้สึกสะดวกสบายกับเชลล์หลักการของระบบปฏิบัติการและ GUI แต่เมื่อพูดถึงพัฒนาการฉันรู้สึกเหมือนได้กลับไปโรงเรียน ทันทีที่ฉันเปิดโครงการขนาดใหญ่ขึ้นฉันติดอยู่ ส่วนใหญ่เป็นไฟล์ makefile ดังนั้นโดยพื้นฐานแล้วเมื่อฉันพยายามนำทางพวกเขาด้วย QT หรือ CodeBlocks อย่างดีที่สุดฉันสามารถใช้ระบบ Intellisense ในแต่ละไฟล์ และตัวแปรส่วนใหญ่เวลารั่วไหลจากขอบเขต จากนั้นมีสิ่งที่เป็นข้อกำหนดซึ่งดูเหมือนไม่มีอยู่ลองเข้าร่วมโครงการขนาดใหญ่จากแหล่งข้อมูลและคุณติดอยู่หลายวันเพราะการนำทางสู่คำจำกัดความยากมาก ... grep -r "this_def" . --include "*.cpp" --include "*.h"ดูเหมือนจะช้าและเงอะงะ และจากนั้นการดีบัก gdb ทำงานได้ แต่ไม่ว่าฉันจะทำอะไรดูเหมือนว่าจะเป็นปีหลัง WinDbg หรือ VisualStudio ดีบั๊ก และสิ่งเหล่านี้ทำให้ฉันหมดหวังฉันต้องการเขียนโค้ด แต่มันช้ามาก ... …
16 c++  linux 

8
ใช้ C ++ แต่ไม่ได้ใช้คุณสมบัติเฉพาะของภาษาควรเปลี่ยนเป็น C?
ฉันกำลังพัฒนาตัวจำลอง NES เป็นงานอดิเรกในเวลาว่าง ฉันใช้ C ++ เพราะเป็นภาษาที่ฉันใช้เป็นส่วนใหญ่รู้จักเป็นส่วนใหญ่และชอบมากที่สุด แต่ตอนนี้ฉันก้าวไปข้างหน้าในโครงการฉันรู้ว่าฉันไม่ได้ใช้คุณสมบัติเฉพาะของ C ++ และสามารถทำได้ใน C ธรรมดาและรับผลลัพธ์เดียวกัน ฉันไม่ได้ใช้เทมเพลตการใช้งานอุปกรณ์มากเกินไปความหลากหลายรูปแบบการสืบทอด แล้วคุณจะว่าอย่างไร ฉันควรอยู่ใน C ++ หรือเขียนใหม่ใน C? ฉันจะไม่ทำสิ่งนี้เพื่อเพิ่มประสิทธิภาพมันอาจมาเป็นผลข้างเคียง แต่ความคิดก็คือทำไมฉันต้องใช้ C ++ ถ้าฉันไม่ต้องการมัน? คุณลักษณะเฉพาะของ C ++ ที่ฉันใช้คือคลาสเพื่อห่อหุ้มข้อมูลและวิธีการ แต่ก็สามารถทำได้เช่นกันกับ structs และฟังก์ชั่นฉันใช้ใหม่และลบ แต่ก็สามารถใช้ malloc และฟรีและฉัน ใช้การสืบทอดสำหรับการเรียกกลับซึ่งสามารถทำได้ด้วยตัวชี้ไปยังฟังก์ชัน โปรดจำไว้ว่ามันเป็นโครงการงานอดิเรกฉันไม่มีกำหนดเวลาดังนั้นค่าใช้จ่ายและงานที่ต้องมีการเขียนใหม่ไม่ใช่ปัญหาอาจสนุกเช่นกัน ดังนั้นคำถามคือ C หรือ C ++
16 c++  c 

3
จะเริ่มเรียนรู้วิธีใช้ห้องสมุด Boost ได้ที่ไหน
เมื่อเร็ว ๆ นี้ Boost มีให้บริการในโครงการที่ฉันใช้งานอยู่และฉันก็ไม่มีประสบการณ์มากนัก ห้องสมุดมีหลายส่วนและคุณสมบัติที่ยากที่จะรู้ว่าจะเริ่มเรียนรู้ได้ที่ไหน - โดยเฉพาะอย่างยิ่งเมื่อฉันพยายามเรียนรู้ในขณะที่สร้างรหัสการผลิต ฉันจะซาบซึ้งมากถ้ามีใครบางคนสามารถแสดงรายการคุณลักษณะ 3 ถึง 5 อย่างซึ่งมีประโยชน์มากโดยทั่วไปการเขียนโปรแกรมทุกวันและระบุว่าทำไมพวกเขาถึงมีประโยชน์ จากนั้นฉันก็สามารถเริ่มเรียนรู้และใช้มันอย่างน้อยมันก็จะทำให้ฉันตั้งหลักในห้องสมุดและเป็นสถานที่ที่เป็นมิตรในการเริ่มเรียนรู้ / ใช้มัน :) ขอบคุณล่วงหน้า!
16 c++  boost 

12
เหตุใด Java จึงถูกพิจารณาว่าพกพาได้มากกว่าภาษาอื่นเช่น C ++
ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ อะไรคือความแตกต่างระหว่าง "การเขียน JRE เฉพาะสำหรับแต่ละแพลตฟอร์ม" สำหรับนักพัฒนา Java และ "การเขียนคอมไพเลอร์ C ++ สำหรับแต่ละแพลตฟอร์ม" สำหรับ C ++
16 java  c++  portability 

5
บางคนสามารถอธิบายวิธีการทำงานของ GUI และเมื่อใดที่ฉันควรเริ่มใช้งาน [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันได้เรียนรู้ภาษา C ++ มาประมาณหนึ่งเดือนแล้วและก่อนที่ฉันจะไปไกลกว่านี้ฉันอยากจะตอบคำถามที่น่าเบื่อนี้ที่ฉันมีต่อไป ฉันรู้ว่า GUI คืออะไร แต่ฉันไม่รู้ว่ามันใช้งานได้จริงและอาจเป็นตัวอย่างของคนดัง แม้ว่าฉันจะรู้ว่าการเขียนโปรแกรมบรรทัดคำสั่งเป็นพื้นฐานที่เปลือยเปล่า แต่ฉันคิดว่ามันคงจะสนุกเมื่อใช้ GUI แม้ว่าฉันจะมีคำถามอื่นอีกประมาณ 3 ล้านคำถาม แต่ฉันก็จะบันทึกไว้: D
16 c++  gui 

4
จะใช้แฟล็ก -pedantic ใน g ++ หรือไม่?
ฉันกำลังเรียนรู้ C ++ และฉันใช้ g ++ บน Linux เพื่อฝึกฝน ฉันต้องการทราบว่าผู้ที่ทำงานเป็นโปรแกรมเมอร์ใช้ g ++ -pedantic flag และยังมีความสำคัญในโลกแห่งความเป็นจริงหรือไม่ แล้วคอมไพเลอร์ตัวอื่น ๆ พวกเขาอนุญาตแบบนี้หรือไม่? สิ่งนี้กลายเป็นมาตรฐานตามความเป็นจริงหรือไม่? ฉันสนใจเพราะฉันกำลังอ่าน C ++ Primer ซึ่งผู้เขียนชี้ให้เห็นว่าการใช้นิพจน์ที่ไม่ใช่ const เป็นมิติในการกำหนดอาเรย์และ g ++ โดยค่าเริ่มต้นอนุญาตให้ทำได้ และอาจมีสิ่งอื่นที่ฉันไม่รู้
16 c++  gcc 

4
เพิ่มระดับของรหัส C / C ++ ของฉัน
ฉันเขียนโปรแกรมมา 3-4 ปีแล้วและรู้สึกว่าฉันไม่สามารถเรียกได้ว่าเป็นผู้เริ่มต้นอีกต่อไป แต่ฉันอ่านคำถามในเว็บไซต์นี้และคิดว่าพวกเขากำลังพูดถึง WTF หรือไม่ ฉันรู้สึกแบบเดียวกันเมื่อฉันหยิบหนังสือเขียนโปรแกรมขึ้นทุกวัน ฉันได้อ่านหนังสือเขียนโปรแกรมเริ่มต้นหลายเล่มบางเล่มใน C / C ++ และอื่น ๆ เกี่ยวกับเกม ฉันได้เขียนสิ่งที่ซับซ้อนมากขึ้นเช่นพื้นฐาน AI, อนุกรมและอินเตอร์เฟส TCP / IP ฉันวางแผนที่จะเป็นโปรแกรมเมอร์เกม แต่เมื่อไม่นานมานี้ฉันมีความสนใจในระบบสมองกลฝังตัวหลังจากมีโอกาสได้ทำงานกับพวกเขา (อินเตอร์เฟสแบบอนุกรม) ฉันพบว่ามันยากมากที่จะหาสื่อเพื่อการเรียนรู้ของฉันต่อหลังจากเสร็จสิ้นการแนะนำและหนังสือเริ่มต้นเนื่องจากไม่มีหนังสือ C ++ ระดับกลางที่ฉันสามารถหาได้ คุณจะให้คำแนะนำอะไรเพื่อพัฒนาและยกระดับความรู้และทักษะของฉัน ทรัพยากรที่เฉพาะเจาะจงจะได้รับการชื่นชมอย่างมาก
16 c++  c 

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