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

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

3
บทบาทของ C ++ ในวันนี้คืออะไร?
ปัจจุบันฉันเป็นนักเรียนไอทีและฉันสงสัยว่าสิ่งที่ยังคงมีความสำคัญใน C ++ วันนี้มันใช้เพื่ออะไร ฉันเรียนจบหลักสูตร C ++ ขั้นพื้นฐานในมหาวิทยาลัยของฉัน แต่ฉันนึกภาพไม่ออกเลยว่าฉันจะใช้ความรู้ของฉันได้ที่ไหนและฉันควรจะไปเรียน C ++ ในทิศทางใด ฉันควรเรียนรู้ที่จะเป็นโปรแกรมเมอร์ C ++ ที่ประสบความสำเร็จอย่างไร ปัจจุบันฉันเรียนรู้ Java เพียงเพราะฉันไม่เห็นชัดเจนว่าพื้นที่ C ++ จะมีประโยชน์ในวันนี้ แต่ฉันรู้ชัดเจนว่างานประเภทใดที่ฉันจะทำในฐานะโปรแกรมเมอร์ Java แต่ฉันก็ยังหวังว่า C ++ จะไม่ตาย
41 c++ 

5
อะไรคือความแตกต่างพื้นฐานระหว่าง C และ C ++ [ปิด]
หลายคนมักจะเขียน "C / C ++" ราวกับว่าพวกเขาเป็นสิ่งเดียวกัน แม้ว่าพวกเขาจะมีความคล้ายคลึงกันมากมาย แต่ก็ไม่เหมือนกันอย่างชัดเจน แต่อะไรคือความแตกต่างพื้นฐานระหว่าง C และ C ++ C ++ เป็นรุ่นปรับปรุงของ C หรือมีคุณสมบัติใน C ซึ่งไม่มีอยู่ใน C ++ หรือไม่
41 c++  c 

8
ภาษา OO สมัยใหม่สามารถแข่งขันกับประสิทธิภาพการจัดเก็บอาร์เรย์ของ C ++ ได้หรือไม่
ฉันเพิ่งสังเกตเห็นว่าภาษาการเขียนโปรแกรม OO สมัยใหม่ทุกอย่างที่ฉันคุ้นเคยอย่างน้อยก็มี (ซึ่งโดยพื้นฐานแล้วก็คือ Java, C # และ D) ช่วยให้อาร์เรย์ covariant นั่นคืออาร์เรย์สตริงเป็นอาร์เรย์วัตถุ: Object[] arr = new String[2]; // Java, C# and D allow this อาร์เรย์ของ Covariant เป็นรูในระบบแบบสแตติก พวกเขาทำให้เกิดข้อผิดพลาดประเภทที่เป็นไปได้ที่ไม่สามารถตรวจพบได้ในเวลารวบรวมดังนั้นทุกการเขียนไปยังอาเรย์ต้องถูกตรวจสอบที่รันไทม์: arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException ดูเหมือนว่าจะมีประสิทธิภาพที่แย่มากถ้าฉันทำร้านค้ามากมาย C ++ ไม่มีอาร์เรย์ที่แปรปรวนร่วมดังนั้นจึงไม่จำเป็นต้องทำการตรวจสอบรันไทม์อีกต่อไปซึ่งหมายความว่าไม่มีการลงโทษประสิทธิภาพ มีการวิเคราะห์เพื่อลดจำนวนการตรวจสอบรันไทม์ที่จำเป็นหรือไม่? ตัวอย่างเช่นถ้าฉันพูดว่า: arr[1] = arr[0]; ใครจะยืนยันว่าร้านค้าไม่อาจล้มเหลว ฉันแน่ใจว่ามีการเพิ่มประสิทธิภาพที่เป็นไปได้อื่น …
40 c#  java  c++  d 

11
มีกรณีที่เกิดขึ้นจริงสำหรับ C ++ โดยไม่มีข้อยกเว้นหรือไม่? [ปิด]
ในเมื่อใดจึงจะใช้ C เหนือ C ++ และ C ++ เหนือ C? มีคำสั่ง wrt ถึงข้อยกเว้นขนาดโค้ด / C ++: คำตอบของเจอรี่ (ท่ามกลางประเด็นอื่น ๆ ): (... ) มันมีแนวโน้มที่จะยากที่จะผลิตไฟล์เอ็กซีคิวต์เล็ก ๆ อย่างแท้จริงด้วย C ++ สำหรับระบบขนาดเล็กจริงๆคุณไม่ค่อยเขียนโค้ดจำนวนมากและส่วนเพิ่มเติม (... ) ที่ฉันถามว่าทำไมที่จะเป็นไปได้ซึ่ง Jerry ตอบ: สิ่งสำคัญคือ C ++ รวมถึงการจัดการข้อยกเว้นซึ่ง (อย่างน้อยโดยปกติ) จะเพิ่มขนาดขั้นต่ำให้กับขนาดที่สามารถเรียกใช้งานได้ คอมไพเลอร์ส่วนใหญ่จะให้คุณปิดการใช้งานการจัดการข้อยกเว้น แต่เมื่อคุณทำผลลัพธ์จะไม่มาก C ++ ( ... ) ซึ่งฉันไม่สงสัยจริงๆในระดับโลกทางเทคนิคจริง ดังนั้นฉันสนใจ (หมดจดจากความอยากรู้อยากเห็น) ที่จะได้ยินจากตัวอย่างในโลกแห่งความจริงที่โครงการเลือก …
40 c++  exceptions 

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

8
ใน C ++ เวลาโปรแกรมเมอร์ที่ใช้ในการจัดการหน่วยความจำ
คนที่เคยชินกับภาษาที่รวบรวมขยะมักจะกลัวการจัดการหน่วยความจำของ C ++ มีเครื่องมือเช่นauto_ptrและshared_ptrที่จะจัดการงานการจัดการหน่วยความจำมากมายสำหรับคุณ ไลบรารี C ++ จำนวนมากลงวันที่ก่อนวันจริงเครื่องมือเหล่านี้และมีวิธีของตัวเองในการจัดการงานการจัดการหน่วยความจำ คุณใช้เวลากับงานการจัดการหน่วยความจำนานเท่าใด ฉันสงสัยว่ามันขึ้นอยู่กับชุดของห้องสมุดที่คุณใช้อย่างมากดังนั้นโปรดบอกว่าคำตอบที่คุณใช้กับคนใดและถ้าพวกเขาทำให้ดีขึ้นหรือแย่ลง
39 c++  memory 

3
ทำไมโอเปอเรเตอร์ NOT แบบลอจิคัลในภาษา C-style“!” และไม่ใช่“ ~~”?
สำหรับตัวดำเนินการไบนารีเรามีตัวดำเนินการทั้งสองบิตและตรรกะ: & bitwise AND | bitwise OR && logical AND || logical OR ไม่ใช่ (โอเปอเรเตอร์ unary) ทำงานแตกต่างกัน มี ~ สำหรับ bitwise และ! สำหรับตรรกะ ฉันจำไม่ได้ว่าเป็นการดำเนินการที่ไม่เป็นเอกเทศเมื่อเทียบกับ AND และหรือ แต่ฉันไม่สามารถคิดได้ว่าทำไมนักออกแบบเลือกที่จะเบี่ยงเบนจากหลักการที่ว่าซิงเกิลเป็น bitwise และ Double นั้นมีเหตุผลที่นี่และเปลี่ยนไปใช้ตัวละครอื่นแทน ฉันเดาว่าคุณสามารถอ่านมันผิดเช่นการดำเนินการสองบิตที่จะคืนค่าตัวถูกดำเนินการ แต่นั่นไม่ได้เป็นปัญหาที่แท้จริงสำหรับฉัน มีเหตุผลที่ฉันขาดหายไปหรือไม่?
39 java  c#  c++  c 

8
ข้อเสียของการจัดการหน่วยความจำตามขอบเขต
ฉันชอบการจัดการหน่วยความจำตามขอบเขต (SBMM) หรือRAIIจริงๆแล้วเนื่องจากชุมชน C ++ เป็นที่รู้จักกันมากกว่าปกติ เท่าที่ฉันรู้ยกเว้น C ++ (และ C) ไม่มีภาษากระแสหลักอื่น ๆ ที่ใช้อยู่ในปัจจุบันซึ่งทำให้ SBMM / RAII เป็นกลไกการจัดการหน่วยความจำหลักและแทนที่จะต้องการใช้การรวบรวมขยะ (GC) ฉันพบว่ามันค่อนข้างสับสนตั้งแต่ SBMM ทำให้โปรแกรมกำหนดค่าได้มากขึ้น (คุณสามารถบอกได้อย่างแม่นยำเมื่อวัตถุถูกทำลาย) ในภาษาที่ใช้ GC คุณมักจะต้องทำการจัดการทรัพยากรด้วยตนเอง (ดูที่การปิดไฟล์ใน Java เช่น) ซึ่งบางส่วนเอาชนะวัตถุประสงค์ของ GC และยังมีข้อผิดพลาดเกิดขึ้นได้ง่าย หน่วยความจำฮีปสามารถ (ขอบเขตอย่างสวยงามมาก, imo) ได้เช่นกัน (ดูstd::shared_ptrใน C ++) ทำไม SBMM ถึงไม่ใช้กันอย่างแพร่หลาย? ข้อเสียของมันคืออะไร?

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

5
แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้เนมสเปซใน C ++ [ปิด]
ฉันได้อ่านClean Codeของลุงบ็อบเมื่อสองสามเดือนที่ผ่านมาและมันมีผลกระทบอย่างลึกซึ้งต่อวิธีการเขียนโค้ดของฉัน แม้ว่าดูเหมือนว่าเขาจะทำซ้ำสิ่งที่โปรแกรมเมอร์ทุกคนควรรู้การรวมพวกเขาทั้งหมดเข้าด้วยกันและนำพวกเขาไปสู่การปฏิบัติจะส่งผลให้มีโค้ดที่สะอาดกว่ามาก โดยเฉพาะอย่างยิ่งฉันพบว่าการแบ่งฟังก์ชั่นขนาดใหญ่ออกเป็นฟังก์ชั่นขนาดเล็กจำนวนมากและการแบ่งคลาสขนาดใหญ่เป็นคลาสจิ๋วจำนวนมากเพื่อให้มีประโยชน์อย่างเหลือเชื่อ ตอนนี้สำหรับคำถาม ตัวอย่างของหนังสือมีทั้งหมดใน Java ขณะที่ฉันทำงานใน C ++ เป็นเวลาหลายปีที่ผ่านมา แนวคิดในClean Codeจะขยายไปถึงการใช้เนมสเปซซึ่งไม่มีอยู่ใน Java ได้อย่างไร (ใช่ฉันรู้เกี่ยวกับแพ็คเกจ Java แต่มันไม่เหมือนกันจริงๆ) มันสมเหตุสมผลไหมที่จะใช้แนวคิดในการสร้างเอนทิตีเล็ก ๆ จำนวนมากแต่ละอันมีหน้าที่กำหนดอย่างชัดเจนสำหรับเนมสเปซ กลุ่มเล็ก ๆ ของคลาสที่เกี่ยวข้องควรถูกห่อในเนมสเปซหรือไม่? นี่เป็นวิธีการจัดการความซับซ้อนของการมีคลาสเล็ก ๆ จำนวนมากหรือค่าใช้จ่ายในการจัดการเนมสเปซมากมายเป็นสิ่งต้องห้ามหรือไม่? แก้ไข: คำถามของฉันเป็นคำตอบในเรื่องนี้รายการวิกิพีเดียเกี่ยวกับแพคเกจหลักการ
38 design  c++  namespace 

4
LPCTSTR คืออะไร
สิ่งที่เป็นLPCTSTRและLPCTSTRเหมือน (เช่นHDC) และสิ่งที่มันไม่ยืน?
37 c++  windows 

1
C ++ 11 รวม std :: stoi ทำไมไม่ std :: itos?
ฉันสังเกตเห็นถึงความยินดีที่ C ++ 11 มีstd::sto@ตระกูลของฟังก์ชั่นสำหรับการเปิด ints / floats / longs อย่างง่ายดายจากสตริง อย่างไรก็ตามฉันก็แปลกใจว่าสิ่งที่ตรงกันข้ามไม่ได้ดำเนินการ เหตุใดคณะกรรมการมาตรฐานจึงไม่รวมstd::itosตระกูลของหน้าที่ในการย้ายจาก ints / float / อะไรก็ตาม (back) ไปเป็น strings?
37 c++  parsing  strings  c++11 

8
เป็นการดีหรือไม่ที่จะต้องพึ่งพาส่วนหัวที่รวมอยู่ในทรานซิสชัน?
ฉันกำลังล้างค่าการรวมในโครงการ C ++ ที่ฉันกำลังทำงานอยู่และฉันสงสัยอยู่เสมอว่าควรรวมส่วนหัวทั้งหมดที่ใช้โดยตรงในไฟล์ใดไฟล์หนึ่งหรือไม่หรือควรจะรวมเฉพาะขั้นต่ำเปล่าเท่านั้น นี่คือตัวอย่างEntity.hpp: #include "RenderObject.hpp" #include "Texture.hpp" struct Entity { Texture texture; RenderObject render(); } (สมมติว่าการประกาศล่วงหน้าสำหรับRenderObjectไม่ใช่ตัวเลือก) ตอนนี้ฉันรู้ว่าRenderObject.hppรวมถึงTexture.hpp- ฉันรู้ว่าเพราะแต่ละคนRenderObjectมีTextureสมาชิก ยังคงฉันอย่างชัดเจนรวมถึงTexture.hppในเพราะฉันไม่แน่ใจว่ามันเป็นความคิดที่ดีที่จะพึ่งพามันถูกรวมอยู่ในEntity.hppRenderObject.hpp ดังนั้น: เป็นการปฏิบัติที่ดีหรือไม่?
37 c++  c  headers  include 

16
การเรียนรู้ภาษาการเขียนโปรแกรมจำนวนมากเป็นเรื่องเจ็บปวดหรือไม่?
ฉันเริ่มอาชีพการเขียนโปรแกรมของฉันกับ BASIC ในช่วงเกรด 9 ฉันเรียนรู้ BASIC เล็กน้อยโดยการเขียนโปรแกรมง่าย ๆ เพื่อเพิ่มลบและพิมพ์ จากนั้นฉันไปมหาวิทยาลัยและรับข้อมูลคอมพิวเตอร์และวิศวกรรมระบบ ในปีแรกฉันได้รับการสอน C และฉันมีความสามารถที่ดี ต่อไปฉันเรียนรู้ C ++ ในปีที่สอง มันเพิ่งสอนความรู้เกี่ยวกับ OOP ให้ฉัน ตอนนี้ฉันกำลังทำ PHP (พร้อมด้วย HTML) ฉันยังไม่เชี่ยวชาญ C ++, BASIC หรือ PHP ตอนนี้ฉันวางแผนที่จะย้ายไปที่การพัฒนาอุปกรณ์พกพา แต่ฉันรู้สึกว่าฉันไม่ได้ครอบคลุมทุกอย่างในภาษาที่ฉันเรียนรู้ มันสำคัญจริงๆหรือ
37 php  c++  c  basic 

11
“ blub paradox” และ c ++
ฉันอ่านบทความที่นี่: http://www.paulgraham.com/avg.htmlและส่วนหนึ่งเกี่ยวกับ "blub paradox" นั้นน่าสนใจเป็นพิเศษ ในฐานะที่เป็นคนที่ใช้รหัสใน c ++ เป็นหลัก แต่มีการสัมผัสกับภาษาอื่น ๆ (ส่วนใหญ่เป็น Haskell) ฉันรู้ว่ามีบางสิ่งที่มีประโยชน์ในภาษาเหล่านี้ซึ่งยากที่จะทำซ้ำใน c ++ คำถามส่วนใหญ่สำหรับคนที่มีความเชี่ยวชาญทั้งใน c ++ และภาษาอื่น ๆ มีคุณสมบัติภาษาที่ทรงพลังหรือสำนวนที่คุณใช้ในภาษาที่ยากที่จะคิดหรือนำไปใช้ถ้าคุณเขียนเฉพาะใน c ++? โดยเฉพาะอย่างยิ่งคำพูดนี้ดึงดูดความสนใจของฉัน: โดยอุปนัยผู้เขียนโปรแกรมเพียงคนเดียวที่สามารถเห็นความแตกต่างของอำนาจระหว่างภาษาต่าง ๆ คือผู้ที่เข้าใจผู้ที่มีอำนาจมากที่สุด (นี่อาจเป็นสิ่งที่ Eric Raymond มีความหมายเกี่ยวกับ Lisp ทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้น) คุณไม่สามารถไว้วางใจความคิดเห็นของผู้อื่นได้เนื่องจาก Blub Paradox: พวกเขาพอใจกับภาษาใดก็ตามที่พวกเขาใช้เพราะมันกำหนด วิธีที่พวกเขาคิดเกี่ยวกับโปรแกรม หากปรากฎว่าฉันเป็นเทียบเท่าโปรแกรมเมอร์ "Blub" โดยอาศัยการใช้ c ++ สิ่งนี้ทำให้เกิดคำถามต่อไปนี้: มีแนวคิดหรือเทคนิคที่มีประโยชน์ที่คุณพบในภาษาอื่นที่คุณคิดว่ายากที่จะทำให้เป็นแนวคิดได้หรือไม่ เคยเขียนหรือ "คิด" ใน c …

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