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

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

6
เหตุใด argv หลักของ C / C ++ จึงถูกประกาศเป็น "char * argv []" แทนที่จะเป็น "char * argv"
เหตุใดจึงถูกargvประกาศให้เป็น "ตัวชี้ไปยังตัวชี้ไปยังดัชนีแรกของอาร์เรย์" แทนที่จะเป็น "ตัวชี้ไปยังดัชนีแรกของอาร์เรย์" ( char* argv) เหตุใดจึงต้องใช้แนวคิดของ "ตัวชี้ไปยังตัวชี้"
21 c++  c 

4
ใช้คลาสนามธรรมใน C # เป็นคำจำกัดความ
ในฐานะนักพัฒนา C ++ ฉันค่อนข้างคุ้นเคยกับไฟล์ส่วนหัว C ++ และพบว่ามีประโยชน์ในการมี "เอกสาร" ที่ถูกบังคับภายในโค้ด ฉันมักจะมีช่วงเวลาที่ไม่ดีเมื่อฉันต้องอ่านรหัส C # เพราะ: ฉันไม่มีแผนที่ทางจิตของชั้นเรียนที่ฉันทำงานด้วย สมมติว่าในฐานะวิศวกรซอฟต์แวร์ฉันกำลังออกแบบกรอบงานของโปรแกรม มันจะบ้าเกินกว่าที่จะนิยามว่าทุกคลาสเป็นคลาสที่ไม่มีการใช้งานแบบนามธรรมคล้ายกับสิ่งที่เราจะทำกับส่วนหัวของ C ++ และให้นักพัฒนาใช้มันได้หรือไม่ ฉันเดาว่าอาจมีสาเหตุบางอย่างที่ทำให้บางคนคิดว่านี่เป็นทางออกที่น่ากลัว แต่ฉันไม่แน่ใจ สิ่งใดที่เราจะต้องพิจารณาเพื่อหาทางแก้ปัญหาเช่นนี้?

5
ควรย้ายเงื่อนไขที่ไม่น่าสนใจไปยังส่วนเริ่มต้นของลูปหรือไม่?
ฉันได้ความคิดนี้จากคำถามนี้ใน stackoverflow.com รูปแบบต่อไปนี้เป็นเรื่องธรรมดา: final x = 10;//whatever constant value for(int i = 0; i < Math.floor(Math.sqrt(x)) + 1; i++) { //...do something } จุดที่ฉันพยายามทำคือข้อความที่มีเงื่อนไขเป็นเรื่องที่ซับซ้อนและไม่เปลี่ยนแปลง มันเป็นการดีกว่าที่จะประกาศในส่วนเริ่มต้นของลูปเช่นนี้? final x = 10;//whatever constant value for(int i = 0, j = Math.floor(Math.sqrt(x)) + 1; i < j; i++) { //...do something } ชัดเจนกว่านี้ไหม เกิดอะไรขึ้นถ้านิพจน์เงื่อนไขนั้นง่ายเช่น …

3
วิธีจัดการกรณีความล้มเหลวในตัวสร้างคลาส C ++
ฉันมีคลาส CPP ซึ่งตัวสร้างทำการดำเนินการบางอย่าง การดำเนินการบางอย่างอาจล้มเหลว ฉันรู้ว่าผู้สร้างไม่คืนสิ่งใด คำถามของฉันคือ มันอนุญาตให้ดำเนินการบางอย่างอื่น ๆ ที่เริ่มต้นสมาชิกในนวกรรมิก? เป็นไปได้ไหมที่จะบอกฟังก์ชั่นการโทรว่าการทำงานบางอย่างใน Constructor ล้มเหลว? ฉันจะnew ClassName()คืนค่า NULL ได้ไหมหากมีข้อผิดพลาดเกิดขึ้นในตัวสร้าง?

3
มีการทดสอบการปฏิบัติตามสำหรับคอมไพเลอร์ C ++ หรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา มีที่ไหนสักแห่งสคริปต์ที่ใช้งานได้ / สามารถเข้าถึงได้อย่างอิสระไฟล์ต้นฉบับหรืออะไรก็ตามที่สามารถวัดการปฏิบัติตามคอมไพเลอร์ C ++ ที่กำหนดได้หรือไม่? ตัวอย่างเช่นการทดสอบ Acid3 สำหรับเบราว์เซอร์: http://acid3.acidtests.org/ ผลลัพธ์ที่ฉันใฝ่ฝันจะเป็นบันทึกเปอร์เซ็นต์ทั่วโลก (หรือหลายบันทึกย่อหนึ่งรายการสำหรับแต่ละมาตรฐานเช่น c ++ 98, c ++ 11, c ++ 14, ฯลฯ ) แล้วทดสอบรายละเอียดด้วย "สำเร็จ" หรือ "ล้มเหลว" สำหรับแต่ละรายการ ที่มา: ฉันมีการสนทนาเกี่ยวกับการส่งเสริมและคอมไพเลอร์ที่ท้าทายบางอย่าง คู่สนทนาของฉันพูดถึงการส่งเสริมเป็นโครงการวิชาการเพราะมันจะไม่ทำงานในคอมไพเลอร์ C ++ ที่สำคัญและฉันตอบว่าคอมไพเลอร์ที่มีปัญหาทางจิตใจไม่ควรนับ ความสามารถในการวัดด้วยรหัสความสอดคล้องที่แท้จริงของคอมไพเลอร์จะช่วยทั้งในการประเมินคอมไพเลอร์และการค้นพบ "มุมกรณี" ที่ควรหลีกเลี่ยงในโค้ดข้ามแพลตฟอร์มที่คอมไพล์ด้วย แก้ไข: 2013-06-22 …
21 c++ 

3
วิธีการเรียกใช้รหัส C ++ ในเบราว์เซอร์โดยใช้ asm.js?
แอปพลิเคชัน asm.js นั้นเร็วมาก (ใกล้กับความเร็ว C ++ ดั้งเดิม): http://kripken.github.io/mloc_emscripten_talk/micro4b.png แต่มันเป็นไปได้อย่างไรที่จะเขียนมันใน C ++, แปลงเป็นรหัส LLVM, แล้วใช้เล่ห์เหลี่ยมกับ emscripten / asm.js? ฉันไม่พบบทช่วยสอนเกี่ยวกับเรื่องนี้ และถ้าฉันเขียนโค้ดใน C ++ แล้วจะใช้ js API-s เช่น XMLHttpRequest, WebSockets, Canvas หรือ WebGL ได้อย่างไร
21 c++  javascript  llvm 

11
ในบางครั้งรหัสแฝงต่ำต้อง“ น่าเกลียด” หรือไม่
(นี่คือจุดมุ่งหมายหลักที่ผู้ที่มีความรู้เฉพาะเกี่ยวกับระบบเวลาแฝงต่ำเพื่อหลีกเลี่ยงคนที่เพิ่งตอบด้วยความคิดเห็นที่ไม่พร้อมเพรียง) คุณรู้สึกว่ามีการแลกเปลี่ยนระหว่างการเขียนโค้ด "ดี" ของโอเรียนท์กับการเขียนโค้ดเวลาแฝงที่ต่ำมาก ๆ หรือไม่? ตัวอย่างเช่นการหลีกเลี่ยงฟังก์ชั่นเสมือนจริงใน C ++ / ค่าโสหุ้ยของ polymorphism เป็นต้นการเขียนโค้ดที่ดูน่ารังเกียจ แต่มันเร็วมากหรือเปล่า? มันยืนอยู่กับเหตุผล - ใครสนใจว่ามันดูน่าเกลียด (ตราบใดที่มันบำรุงรักษาได้) - ถ้าคุณต้องการความเร็วคุณต้องการความเร็ว ฉันจะสนใจที่จะได้ยินจากคนที่ทำงานในพื้นที่ดังกล่าว
21 java  c++  c  performance  latency 

6
การตรวจสอบ“ โมฆะ” ใน C หรือ C ++ หมายถึงอะไร
ฉันได้เรียนรู้ภาษาซีพลัสพลัสและฉันก็เข้าใจปัญหาได้ยาก โดยเฉพาะอย่างยิ่งบทเรียนที่ฉันได้อ่านพูดถึงการทำ "ตรวจสอบโมฆะ" แต่ฉันไม่แน่ใจว่ามันหมายถึงอะไรหรือทำไมมันจำเป็น อะไรที่เป็นโมฆะ? "ตรวจสอบค่าว่าง" หมายความว่าอย่างไร ฉันจำเป็นต้องตรวจสอบค่าว่างเสมอหรือไม่? ตัวอย่างโค้ดใด ๆ จะได้รับการชื่นชมมาก
21 c++  c  null 

12
กระบวนทัศน์“ ทำสิ่งเดียว” เมื่อไรจะกลายเป็นอันตราย
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา เพื่อประโยชน์ของการโต้แย้งนี่คือตัวอย่างฟังก์ชั่นที่พิมพ์เนื้อหาของไฟล์ที่กำหนดทีละบรรทัด รุ่น 1: void printFile(const string & filePath) { fstream file(filePath, ios::in); string line; while (std::getline(file, line)) { cout << line << endl; } } ฉันรู้ว่าขอแนะนำให้ฟังก์ชั่นทำสิ่งหนึ่งที่ระดับหนึ่งของสิ่งที่เป็นนามธรรม สำหรับฉันแม้ว่าโค้ดด้านบนจะทำสิ่งหนึ่งและค่อนข้างปรมาณู หนังสือบางเล่ม (เช่น Clean Code ของ Robert C. Martin) ดูเหมือนจะแนะนำให้แบ่งรหัสด้านบนออกเป็นฟังก์ชันแยกต่างหาก …

5
การใช้คลาสสแตติกเป็นเนมสเปซ
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันเห็นผู้พัฒนารายอื่นใช้คลาสคงที่เป็นเนมสเปซ public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 { public void DoSomething() { } } } public static class CategoryB { public class Item3 { public void DoSomething() …

6
การเพิ่มการทดสอบหน่วยมีเหตุผลสำหรับรหัสดั้งเดิมที่รู้จักกันดีหรือไม่
ฉันกำลังพูดถึงการทดสอบหน่วยในความหมาย TDD (ไม่ใช่ "การรวม" โดยอัตโนมัติหรือสิ่งที่คุณต้องการเรียกว่าการทดสอบ) รหัสดั้งเดิมในรหัส (C ++) โดยไม่มีการทดสอบ (ดู: Michael Feathers ' ทำงานอย่างมีประสิทธิภาพด้วยรหัสดั้งเดิม ) แต่ยังเป็นรหัสดั้งเดิมใน: รหัสที่ทีมของเราทำงานด้วยกันมา 10-5 ปีที่ผ่านมาดังนั้นเราจึงมักจะมีความคิดที่ดีเกี่ยวกับสถานที่ที่จะนำสิ่งต่าง ๆ มาเปลี่ยนอะไรบางอย่าง เรามีการทดสอบหน่วยในสถานที่ (ผ่าน Boost.Test) สำหรับบางโมดูลที่มาในภายหลังหรือเป็นแบบ "ธรรมชาติ" สำหรับการทดสอบหน่วย (เช่นคอนเทนเนอร์เฉพาะแอปทั่วไปสตริงสิ่งผู้ช่วยเครือข่าย ฯลฯ ) เรายังไม่มีการทดสอบการยอมรับอัตโนมัติที่เหมาะสม ตอนนี้เมื่อเร็ว ๆ นี้ฉันมี "ความสุข" ที่จะใช้คุณสมบัติใหม่ 3 อย่างที่ผู้ใช้งานต้องเผชิญ แต่ละคนใช้เวลาประมาณ 1-2 ชั่วโมงในการเร่งความเร็วด้วยส่วนรหัสที่ฉันต้องการเปลี่ยน 1-2 ชั่วโมงชั่วโมงในการใช้รหัส (เล็กน้อย) ที่ฉันต้องเปลี่ยนและอีก 1-2 ชั่วโมงเพื่อให้แน่ใจว่าแอป วิ่งอย่างถูกต้องในภายหลังและมันก็ควรจะทำ ตอนนี้ฉันเพิ่มรหัสเล็กน้อย (ฉันคิดว่าวิธีหนึ่งและสองสามบรรทัดสำหรับแต่ละคุณสมบัติ) …
21 c++  tdd  legacy  unit-testing 

4
รับ C ++ '11 ได้รับการอนุมัติการเปลี่ยนแปลงนี้จะเป็นวิธีเริ่มต้น C ++ เรียนรู้ภาษาหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันต้องการเรียนรู้ C ++ สำหรับชั่วขณะหนึ่งและใช้การเขียนโปรแกรมคอมพิวเตอร์ AP ในโรงเรียนมัธยม (กลับตอนที่เป็น C ++ ไม่ใช่ Java) ฉันสนุกกับ C และไม่ได้มีเวลาเรียนรู้ C ++ หรือฉันจะถอยกลับใน C # ที่ฉันมีประสิทธิผลมากขึ้น คำถามของฉันคือ: เนื่องจาก C ++ '11 ได้รับการอนุมัติ (แม้ว่าฉันรู้ว่ายังไม่ได้ใช้งานอย่างสมบูรณ์) สิ่งนี้เปลี่ยนวิธีที่ฉันควรเข้าใกล้การเรียนรู้ C ++ หรือไม่ ฉันเป็นเจ้าของC ++: การอ้างอิงที่สมบูรณ์โดย Herb Schildtซึ่งมาจากปี 1998 มาตรฐานที่เพิ่งได้รับการอนุมัติทำให้การเรียนรู้จากหนังสือดังกล่าวมีความสำคัญน้อยกว่าบทเรียน / …
21 learning  c++ 

9
C แตกต่างจาก C ++ อย่างไร
หลายคนบอกว่า C ++ เป็นภาษาที่แตกต่างจาก C อย่างสิ้นเชิง แต่ Bjarne เองก็บอกว่า C ++ เป็นภาษาที่ต่อจาก C ดังนั้นจึงเป็นที่++มาของภาษานั้น เหตุใดทุกคนจึงบอกว่า C และ C ++ เป็นภาษาที่แตกต่างอย่างสิ้นเชิง? C แตกต่างจาก C ++ อย่างไรบ้างนอกเหนือจากคุณสมบัติเพิ่มเติมใน C ++

6
โดยทั่วไปแล้วควรใช้ฟังก์ชั่นเสมือนเพื่อหลีกเลี่ยงการแตกแขนงหรือไม่?
ดูเหมือนว่าจะมีคำสั่งที่เทียบเท่ากันอย่างคร่าว ๆ เพื่อแบ่งให้เท่ากันกับค่าใช้จ่ายของฟังก์ชั่นเสมือนสาขาพลาดมีการแลกเปลี่ยนที่คล้ายกัน: การเรียนการสอนเทียบกับแคชข้อมูลพลาด อุปสรรคการเพิ่มประสิทธิภาพ ถ้าคุณมองสิ่งที่ชอบ: if (x==1) { p->do1(); } else if (x==2) { p->do2(); } else if (x==3) { p->do3(); } ... คุณอาจมีฟังก์ชั่นสมาชิกอาร์เรย์หรือถ้ามีหลายฟังก์ชั่นขึ้นอยู่กับการจัดหมวดหมู่เดียวกันหรือมีการจัดหมวดหมู่ที่ซับซ้อนมากขึ้นให้ใช้ฟังก์ชั่นเสมือน: p->do() แต่โดยทั่วไปว่าราคาแพงมีหน้าที่เสมือน VS แตกแขนงมันเป็นเรื่องยากที่จะทดสอบบนแพลตฟอร์มพอที่จะพูดคุยเพื่อให้ผมสงสัยว่าถ้าคนใดคนหนึ่งมีกฎหยาบของนิ้วหัวแม่มือ (น่ารักถ้ามันเป็นง่ายๆเป็น 4 ifคือเบรกพอยต์) โดยทั่วไปแล้วฟังก์ชั่นเสมือนจะชัดเจนกว่าและฉันก็จะเอนไปทางพวกเขา แต่ฉันมีหลายส่วนที่สำคัญมากซึ่งฉันสามารถเปลี่ยนรหัสจากฟังก์ชั่นเสมือนเป็นสาขาได้ ฉันต้องการที่จะมีความคิดเกี่ยวกับเรื่องนี้ก่อนที่จะดำเนินการนี้ (ไม่ใช่การเปลี่ยนแปลงเล็กน้อยหรือง่ายต่อการทดสอบในหลาย ๆ แพลตฟอร์ม)
21 c++  performance 


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