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

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

5
การส่งผ่านข้อโต้แย้งเป็นการอ้างอิง const การเพิ่มประสิทธิภาพก่อนกำหนดหรือไม่
"การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด" ฉันคิดว่าสิ่งนี้เราทุกคนสามารถตกลงกันได้ และฉันพยายามอย่างหนักเพื่อหลีกเลี่ยงการทำเช่นนั้น แต่เมื่อเร็ว ๆ นี้ผมได้รับการสงสัยเกี่ยวกับการปฏิบัติของพารามิเตอร์ผ่านโดยอ้างอิง constแทนโดยราคา ฉันได้รับการสอน / เรียนรู้ว่าการโต้แย้งฟังก์ชั่นที่ไม่สำคัญ (เช่นประเภทที่ไม่ใช่แบบดั้งเดิม) ควรจะถูกส่งผ่านโดยการอ้างอิง const - หนังสือบางเล่มที่ฉันได้อ่านแนะนำว่านี่เป็น "แนวปฏิบัติที่ดีที่สุด" ถึงกระนั้นฉันก็อดไม่ได้ที่จะสงสัย: คอมไพเลอร์สมัยใหม่และคุณสมบัติภาษาใหม่สามารถทำงานได้อย่างน่าอัศจรรย์ดังนั้นความรู้ที่ฉันได้เรียนรู้อาจล้าสมัยไปแล้วและฉันไม่เคยใส่ใจในโปรไฟล์เลยหากมีความแตกต่างระหว่างประสิทธิภาพ void fooByValue(SomeDataStruct data); และ void fooByReference(const SomeDataStruct& data); เป็นวิธีปฏิบัติที่ฉันได้เรียนรู้ - ผ่านการอ้างอิง const (โดยค่าเริ่มต้นสำหรับประเภทที่ไม่สำคัญ) - การเพิ่มประสิทธิภาพก่อนวัยอันควร?

8
ควรมีการยืนยันในการสร้างงาน
พฤติกรรมเริ่มต้นของassertใน C ++ คือการไม่ทำอะไรเลยใน build build ฉันเข้าใจว่ามันทำด้วยเหตุผลด้านประสิทธิภาพและอาจป้องกันไม่ให้ผู้ใช้เห็นข้อความแสดงข้อผิดพลาดที่น่ารังเกียจ อย่างไรก็ตามฉันขอยืนยันว่าสถานการณ์เหล่านั้นที่assertมีผู้ถูกไล่ออก แต่ถูกปิดการใช้งานมีปัญหามากขึ้นเพราะแอปพลิเคชันอาจจะล้มเหลวในทางที่แย่ลงกว่าเดิมเพราะค่าคงที่บางส่วนถูกทำลาย นอกจากนี้อาร์กิวเมนต์ประสิทธิภาพสำหรับฉันนับเฉพาะเมื่อมันเป็นปัญหาที่วัดได้ ส่วนใหญ่assertในรหัสของฉันไม่ซับซ้อนกว่า assert(ptr != nullptr); ซึ่งจะมีผลกระทบเล็กน้อยกับรหัสส่วนใหญ่ สิ่งนี้นำไปสู่คำถาม: ควรยืนยัน (หมายถึงแนวคิดไม่ใช่การนำไปปฏิบัติเฉพาะ) ควรมีการใช้งานใน build build หรือไม่? ทำไมจะไม่ล่ะ)? โปรดทราบว่าคำถามนี้ไม่ได้เกี่ยวกับวิธีเปิดใช้งาน asserts ใน build builds (เช่น#undef _NDEBUGหรือใช้การยืนยัน assert แบบกำหนดเอง) นอกจากนี้มันไม่เกี่ยวกับการเปิดใช้งาน asserts ในรหัสห้องสมุดของบุคคลที่สาม / มาตรฐาน แต่ในรหัสที่ควบคุมโดยฉัน

3
การพูดคุยเกี่ยวกับ“ วิธีการ” ของ C ++ มันผิดอย่างไร (กับ“ ฟังก์ชั่นสมาชิก”)
ฉันเข้าใจว่าตาม C ++ สเป็คไม่มีสิ่งเช่น "วิธีการ" และบางส่วน (มากที่สุด?) โปรแกรมเมอร์ C ++ พิจารณา "วิธี" เป็น Java-ism ในทางกลับกันแม้แต่ในฟอรัม C ++คนก็ดูเหมือนจะพูดถึงวิธีการต่างๆโดยไม่ชักกระตุก ฉันกำลังมองหาอนุสัญญาที่เป็นที่รู้จักหรือการปฏิบัติทั่วไปเกี่ยวกับคำศัพท์นี้ ฉันกำลังทำเอกสาร API ที่มีทั้ง C ++ และ Java เวอร์ชัน นักพัฒนาได้เก็บคลาสและเมธอด / ฟังก์ชันสมาชิกไว้เหมือนกันระหว่างสองชื่อนี้เพื่อความสะดวกในการย้ายและการทดสอบ ด้วยเหตุนี้สิ่งที่จำเป็นต้องได้รับการบันทึกเกี่ยวกับ API เหล่านี้คือ "ทางเลือก" ด้านบนของภาษา ฉันต้องสามารถพูดคุยทั่วไปเกี่ยวกับ Foos และ Bars ด้วยวิธีการ baz () และ mumble () ... วิธีการ? ถ้าฉันพูดถึงวิธีการโปรแกรมเมอร์ Java จะพิจารณาเป็นธรรมชาติและจะปรากฏขึ้นโปรแกรมเมอร์ C …

5
เป็นความคิดที่ดีหรือไม่ที่จะ“ #define me (* this)”?
แมโครนี้สามารถกำหนดในส่วนหัวร่วมบางส่วนหรือดีกว่าเป็นพารามิเตอร์บรรทัดคำสั่งคอมไพเลอร์: #define me (*this) และตัวอย่างการใช้งาน: some_header.h: inline void Update() { /* ... */ } main.cpp: #include "some_header.h" class A { public: void SetX(int x) { me.x = x; me.Update(); } void SomeOtherFunction() { ::Update(); } /* 100 or more lines ... */ void Update() { // ... } int x; …
19 c++ 

11
คอมไพเลอร์ C ++ เอาวงเล็บที่ไม่มีประโยชน์ออกหรือไม่
รหัสจะ int a = ((1 + 2) + 3); // Easy to read ทำงานช้ากว่า int a = 1 + 2 + 3; // (Barely) Not quite so easy to read หรือคอมไพเลอร์สมัยใหม่ฉลาดพอที่จะลบ / ปรับวงเล็บ "ไร้ประโยชน์" ดูเหมือนว่าจะเป็นข้อกังวลในการเพิ่มประสิทธิภาพเล็ก ๆ น้อย ๆ แต่การเลือก C ++ มากกว่า C # / Java / ... นั้นเกี่ยวกับการปรับให้เหมาะสมที่สุด (IMHO)

7
การเขียนโปรแกรมแบบแยกส่วนมีผลต่อเวลาคำนวณหรือไม่
ทุกคนบอกว่าฉันควรทำให้โค้ดเป็นโมดูล แต่มันไม่ได้มีประสิทธิภาพน้อยกว่าถ้าฉันใช้วิธีการโทรมากกว่าวิธีที่น้อยกว่า แต่มีขนาดใหญ่กว่า ความแตกต่างใน Java, C หรือ C ++ สำหรับเรื่องนั้นคืออะไร? ฉันเข้าใจว่าการแก้ไขอ่านและทำความเข้าใจได้ง่ายขึ้นโดยเฉพาะในกลุ่ม ดังนั้นการสูญเสียเวลาในการคำนวณจึงไม่มีนัยสำคัญเมื่อเทียบกับประโยชน์ความเป็นระเบียบเรียบร้อยของรหัส?
19 java  c++  c  efficiency 

3
QT-C ++ vs Generic C ++ และ STL [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา เคยแปรงฟันบน C ++ ของฉันเมื่อเร็ว ๆ นี้บน Ubuntu QQ ฉันชอบกรอบ Qt สำหรับทุกสิ่งโดยเฉพาะอย่างยิ่งการสร้าง GUI ฉันคุ้นเคยกับมันมากเมื่อใช้ PyQt ในช่วงไม่กี่ปีที่ผ่านมา เมื่อใช้ PyQt ฉันมีปัญหาบางอย่างที่ตอนนี้เด่นชัดมากขึ้นเมื่อใช้ C ++ กับ Qt: Qt มีส่วนขยายจำนวนมากเป็น C ++ ซึ่งเป็น Qt เฉพาะ - QString เป็นเพียงตัวอย่างทั่วไปไม่พูดถึงการรวบรวมขยะอัตโนมัติ เป็นไปได้ที่จะเขียนแอปพลิเคชัน Qt โดยใช้ C ++ โดยไม่ต้องรู้อะไรมากมายเกี่ยวกับ C …
19 c++  qt  stl  gtk  pyqt4 

6
ภาษาโปรแกรมที่อนุญาตให้คุณกำหนดขีด จำกัด ใหม่สำหรับประเภทอย่างง่าย
หลายภาษาชอบC++, C#และJavaช่วยให้คุณสามารถสร้างวัตถุที่เป็นตัวแทนของประเภทง่ายๆเช่นหรือinteger floatการใช้อินเตอร์เฟสคลาสคุณสามารถแทนที่โอเปอเรเตอร์และดำเนินการตรรกะเช่นตรวจสอบว่าค่าเกินกว่ากฎธุรกิจ 100 ฉันสงสัยว่าในบางภาษาอาจมีการกำหนดกฎเหล่านี้เป็นคำอธิบายประกอบหรือคุณสมบัติของตัวแปร / คุณสมบัติ ตัวอย่างเช่นในC#คุณอาจเขียน: [Range(0,100)] public int Price { get; set; } หรือบางทีC++คุณอาจจะเขียน: int(0,100) x = 0; ฉันไม่เคยเห็นอะไรแบบนี้มาก่อน แต่ได้รับความเชื่อถือในการตรวจสอบข้อมูลก่อนการจัดเก็บ แปลกที่ฟีเจอร์นี้ไม่ได้ถูกเพิ่มลงในภาษา คุณช่วยยกตัวอย่างภาษาที่เป็นไปได้ไหม

6
เมื่อใดที่ต้องจ่ายสำหรับคอมไพเลอร์ C ++ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เมื่อเร็ว ๆ นี้ฉันเริ่มสงสัยว่านักพัฒนาควรจะจ่ายค่าคอมไพเลอร์ คอมไพเลอร์มาฟรีกับแพลตฟอร์มส่วนใหญ่หรือมีรุ่นฟรีที่หาได้ง่าย ตัวอย่าง: OS X - GCC และ Clang / LLVM มาพร้อมกับเครื่องมือสำหรับนักพัฒนา ไม่มีข้อ จำกัด ที่นี่สำหรับวิธีและสิ่งที่คุณสามารถเปิดกับพวกเขา Linux - GCC และฉันก็มั่นใจมากกว่านี้ ฉันไม่รู้สถานะของคอมไพเลอร์ลินุกซ์ในปัจจุบัน ไม่มีข้อ จำกัด ที่นี่สำหรับวิธีและสิ่งที่คุณสามารถเปิดกับพวกเขา Windows - MinGW และ Microsoft เสนอ Visual Studio รุ่นฟรี ไม่มีข้อ จำกัด กับ MinGW แต่ฉันคิดว่า Visual Studio ฟรีมีข้อ จำกัด …
19 c++  compiler 

5
การตรวจจับการลบของการลบ [] กับการลบในเวลารวบรวม
ฉันต้องการทราบว่าเป็นไปได้หรือไม่ที่จะตรวจพบdeleteข้อผิดพลาดที่แสดงความคิดเห็นด้านล่างในเวลารวบรวม? โดยเฉพาะอย่างยิ่งฉันต้องการทราบเกี่ยวกับคอมไพเลอร์ g ++ ClassTypeA *abc_ptr = new ClassTypeA[100]; abc_ptr[10].data_ = 1; delete abc_ptr; // error, should be delete []

6
เป็นประโยชน์หรือไม่ที่จะละทิ้ง STL ในการพัฒนา C ++? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันรู้ว่าในบางพื้นที่ (เช่นอุตสาหกรรมเกม) ไม่แนะนำให้ใช้ STL ดังนั้นคำถามของฉันคือจริง ๆ แล้วมันเป็นการปฏิบัติที่ดีที่จะไม่ใช้ STL ในบางกรณีหรือไม่? ถ้าเป็นเช่นนั้นเหตุผลที่ดีที่สุดที่ไม่ใช้ STL ของ C ++ สมัยใหม่คืออะไร
19 c++  stl 

6
มันเป็นนิสัยที่ดีในการใช้ C นิพจน์ในรหัส C ++ หรือไม่
ที่โรงเรียนเราเริ่มเรียน C ในปีนี้แม้ว่าฉันจะอยู่ข้างหน้าของชั้นเรียนและฉันเรียนรู้ Java, C ++ และ C ในขณะที่ชั้นเรียนอยู่ที่ฐานของ C อย่างไรก็ตามฉันได้ทำเอกสารด้วยตัวเองอ่านหนังสือ บทความและฉันถามครูของฉันว่าทำไมฉันควรเรียนรู้ C และเธอบอกว่ามันเป็นรากฐานของ C ++ เมื่อฉันเริ่มเขียนโปรแกรมครั้งแรกฉันพบว่า C ++ ง่ายขึ้นมากฉันเรียนรู้ C ในภายหลัง แต่ในหนังสือคุณจะเห็นว่ารหัส C ทำงานได้ใน C ++ แต่มันก็ไม่ได้ตรงกันข้าม คำถามของฉันตรงไปตรงมา ~ เป็นนิสัยที่ดีในการใช้ C นิพจน์ใน C ++ หรือไม่ ผมขอยกตัวอย่าง: ควรรหัสนี้ #include <stdio.h> #include <iostream> int main() { int x; scanf("%d", &x); cout …
19 c++  c 

5
เหตุใด C ++ ไม่สามารถใช้แนวทางของ D ในการนำแนวคิดไปใช้
อย่างที่พวกคุณหลายคนรู้แนวคิดแนวทางของ C ++ สำหรับการ จำกัด ประเภทที่เป็นไปได้สำหรับอาร์กิวเมนต์เท็มเพลตล้มเหลวที่จะรวมอยู่ใน C ++ 11 ฉันเรียนรู้ว่าภาษาการเขียนโปรแกรม D 2.0 มีคุณสมบัติคล้ายกันสำหรับการเขียนโปรแกรมทั่วไป การแก้ปัญหาดูเหมือนว่าฉันจะค่อนข้างหรูหราและเรียบง่าย ดังนั้นคำถามของฉันทำไม C ++ ไม่สามารถใช้วิธีการที่คล้ายกัน เป้าหมายของแนวคิด C ++ อาจใหญ่กว่าการนำไปใช้ของ D หรือมรดกของ C ++ ป้องกันไม่ให้ใช้แนวทางดังกล่าว หรืออื่น ๆ ขอบคุณสำหรับคำตอบของคุณ ps หากต้องการดูตัวอย่างพลังการเขียนโปรแกรมทั่วไปของ D โปรดอ้างอิงถึงสิ่งนี้: /programming/7300298/metaprogramming-in-c-and-in-d/7303534#7303534
19 c++  templates  d 

14
University สอน C ++ ในรูปแบบ DOS วิธีจัดการกับมัน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันเขียนโปรแกรมมาหลายปีแล้ว แต่ต้องการประกาศนียบัตรเพื่อให้ทำงานได้ดีขึ้น หลังจากผ่านการเรียนในมหาวิทยาลัยมาแล้วหนึ่งครั้งฉันไม่ได้เลือกวิชาวิทยาการคอมพิวเตอร์ครบ 5 ปี แต่เป็นหลักสูตรวิศวกรรมซอฟต์แวร์ที่สั้นกว่า ฉันคาดหวังว่ามันจะมุ่งเน้นไปที่ทักษะที่เป็นรูปธรรมมากกว่าในทางทฤษฎี แต่ก็ยังมีความคิดนี้ว่ามหาวิทยาลัยและอาจารย์เช่นสิ่งที่ถูกต้องเป็นทางการและเป็นวิชาการ มันยังเป็นวิทยาศาสตร์ใช่ไหม ผิด - ฉันประหลาดใจกับจำนวนหลักสูตรไอทีที่เลอะเทอะ ในหลักสูตรเบื้องต้นเกี่ยวกับ C ++ เราได้รับการทดสอบเกี่ยวกับความคิดโบราณเช่น "ทำไม globals ไม่ดี" และ "ทำไมค่าคงที่ดี" หลังจากเขียนโปรแกรม 1-2 รายการ เกร็ดเล็กเกร็ดน้อยแบบสุ่มโดยไม่มีบริบทที่เหมาะสม เอกสารประกอบคำบรรยายที่มีอยู่system(pause/cls), getchและส่วนหัวเหมือนและconio.h iodos.hหนึ่งในภารกิจคือการพิมพ์ "อักขระ ASCII" จาก 32 ถึง255ด้วยภาพหน้าจอที่แสดงตารางดังกล่าวที่พิมพ์โดยใช้หน้ารหัส Windows-1252 แต่ไม่มีการเข้ารหัสใด ๆ เลย คำถาม : …
19 c++  teaching 

6
ฟังก์ชันแบบอินไลน์ใน C ++ ประเด็นคืออะไร?
ตามสิ่งที่ฉันอ่านคอมไพเลอร์ไม่จำเป็นต้องแทนที่การเรียกใช้ฟังก์ชันของฟังก์ชันอินไลน์ด้วยร่างกาย แต่จะทำเช่นนั้นหากทำได้ นี่ทำให้ฉันคิด - ทำไมเราถึงมีคำอินไลน์ถ้าเป็นเช่นนั้น? ทำไมไม่ทำฟังก์ชั่นอินไลน์ฟังก์ชั่นทั้งหมดโดยค่าเริ่มต้นและให้คอมไพเลอร์คิดว่ามันสามารถทดแทนการโทรด้วยร่างกายฟังก์ชั่นหรือไม่?

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