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

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

17
ฉันจะรู้สึกมั่นใจมากขึ้นเกี่ยวกับทักษะการเขียนโปรแกรมของฉันได้อย่างไร [ปิด]
การเขียนโปรแกรมไม่ใช่คนต่างด้าวสำหรับฉัน ฉันเริ่มทำมาร์กอัพ (HTML ตอนนี้โปรดอย่าหัวเราะเยาะฉัน) เมื่อฉันอายุได้ 12 ปีและ BASIC เล็กน้อยเมื่อฉันอายุ 13 (ฉันรู้มากเกี่ยวกับ Flowcharts, Pseudocodes ณ จุดนี้) แต่แล้วฉันก็ถูกตักเตือนเป็น ชีววิทยาในโรงเรียนมัธยมและด้วยเหตุนี้จึงพลาดความรู้ด้านการเขียนโปรแกรม "ของจริง" ของภาษาเช่น C, Java, etcetera ฉันใช้ CS กับ UG BE ของฉัน (คล้ายกับ BS แต่เป็นไปตามทฤษฎีมากกว่า) ฉันเรียน C & C ++ (ในระดับที่น้อยกว่า) ด้วยตัวเอง (ศาสตราจารย์ของฉันเจ็บปวดมากและชั้นเรียนเต็มไปด้วย code-jocks (ที่เรียนมาแล้วในโรงเรียนและด้วยเหตุนี้ไม่สนใจห้องเรียน) ให้ปุถุชนน้อยกว่าอย่างฉันให้ความสนใจกับชั้นเรียนด้วย) และสามารถชักนำโปรแกรมการบวกหรือการคูณที่ยอดเยี่ยม (อันที่ตอนนี้แม้แต่ผู้ทำสวนเองก็ใจดีด้วย) ปัญหาหลักของฉันคือฉันรู้สึกไม่ดีและบีบคอด้วยทักษะการเขียนโปรแกรมที่ จำกัด ของฉันและดูหมิ่นโดย code-jocks (เชื่อฉันสิฉันเจอเว็บไซต์นี้มานานแล้ว แต่ตอนนี้อาจสร้างความกล้าหาญที่จะโพสต์จริง …

6
ตัวอย่างที่ดีของรหัสที่ซับซ้อนโดยใช้ TDD [ปิด]
อะไรจะเป็นตัวอย่างที่ดีของการใช้ TDD ในโครงการขนาดใหญ่ชีวิตจริงที่ซับซ้อน? ตัวอย่างทั้งหมดที่ฉันเคยเห็นเป็นโครงการของเล่นสำหรับหนังสือหรือกระดาษ ... คุณสามารถตั้งชื่อโครงการโอเพ่นซอร์สที่ใช้ TDD อย่างหนักได้หรือไม่? โดยเฉพาะอย่างยิ่งใน C ++ แต่ฉันสามารถอ่าน Java และ C # หรือภาษาอื่นที่คล้ายคลึงกัน
37 java  c#  open-source  c++  tdd 

10
ฉันเป็นผู้เริ่มต้น ฉันสามารถเริ่มต้นเรียนรู้ C ++ 11 ได้โดยตรงหรือไม่ หรือฉันต้องเรียนรู้ C ++ เก่า ๆ ? [ปิด]
ฉันเป็นผู้เริ่มต้นและมีความรู้เพียงเล็กน้อยในการเขียนโปรแกรม มันจะดีหรือไม่ถ้าฉันเรียนรู้ C ++ โดยตรงจากหนังสือที่ครอบคลุม C ++ 11 ใหม่หรือฉันควรเรียนผ่านหนังสือ C ++ ที่ดีที่สุด? ฉันควรมีความรู้เล็กน้อยเกี่ยวกับ C ++ ก่อนเรียน C ++ 11 หรือไม่ หรือฉันสามารถเริ่มต้นได้โดยตรงจากที่นั่น? มันจะทำให้เกิดปัญหาหรือไม่ถ้าฉันเริ่มต้นจาก C ++ 11 โดยตรง ถ้าไม่เช่นนั้นแนะนำหนังสือบางเล่มใน C ++ 11
36 c++  c++11 

2
Rust แตกต่างจากสิ่งอำนวยความสะดวกในการทำงานพร้อมกันของ C ++ อย่างไร
คำถาม ฉันพยายามที่จะเข้าใจว่าสนิมช่วยปรับปรุงพื้นฐานและพร้อมกันของสิ่งอำนวยความสะดวกในการทำงานพร้อมกันของ C ++ หรือไม่เพื่อที่จะตัดสินใจว่าฉันควรใช้เวลาในการเรียนรู้สนิมหรือไม่ โดยเฉพาะอย่างยิ่ง idiomatic Rust จะพัฒนาขึ้นอย่างไรหรือในอัตราที่ต่างกันอย่างไรสิ่งอำนวยความสะดวกที่เกิดขึ้นพร้อมกันของ C ++ การปรับปรุง (หรือความแตกต่าง) ส่วนใหญ่เกี่ยวกับการสร้างประโยคหรือเป็นการปรับปรุงที่สำคัญในกระบวนทัศน์หรือไม่? หรือมันเป็นอย่างอื่น? หรือไม่เป็นการปรับปรุงที่แท้จริง (divergence) เลยเหรอ? หลักการและเหตุผล ฉันเพิ่งพยายามสอนสิ่งอำนวยความสะดวกในการทำงานพร้อมกันของ C ++ 14 และมีบางสิ่งที่รู้สึกไม่ถูกต้อง บางสิ่งบางอย่างรู้สึกปิด สิ่งที่รู้สึกออก? ยากที่จะพูด. รู้สึกว่าคอมไพเลอร์ไม่ได้พยายามช่วยฉันในการเขียนโปรแกรมที่ถูกต้องเมื่อพูดถึงการทำงานพร้อมกัน รู้สึกราวกับว่าฉันกำลังใช้แอสเซมเบลอร์มากกว่าคอมไพเลอร์ เป็นที่ยอมรับกันว่าเป็นไปได้ทั้งหมดที่ฉันยังต้องทนทุกข์ทรมานจากแนวคิดที่บอบบางและผิดพลาดเมื่อมันเกิดขึ้นพร้อมกัน บางทีฉันอาจจะยังไม่เห็นความตึงเครียดของ Bartosz Milewski ระหว่างการเขียนโปรแกรมแบบรัฐและการแข่งขันข้อมูล บางทีฉันอาจไม่เข้าใจว่ามีวิธีการทำงานพร้อมกันของเสียงในคอมไพเลอร์มากน้อยแค่ไหนและมันมีอยู่ในระบบปฏิบัติการเท่าใด
35 c++  concurrency  rust  c++14 

9
อัลกอริทึมสำคัญกว่าภาษาโปรแกรมหรือไม่
ในระหว่างการประกวดGoogle Code Jamปัจจุบัน (2013) มีปัญหาที่เกิดขึ้นกับคน C ++ และ Java มากกว่า 200 บรรทัดเมื่อเทียบกับคน Python ที่แก้ไขปัญหาเดียวกันโดยใช้รหัส 40 บรรทัดเท่านั้น Python ไม่สามารถเทียบเคียงได้โดยตรงกับ C ++ และ Java แต่ความแตกต่างของคำฟุ่มเฟื่อยที่ฉันคิดว่าอาจมีอิทธิพลต่อประสิทธิภาพของอัลกอริทึม การรู้อัลกอริทึมที่ถูกต้องสำคัญอย่างไรเมื่อเทียบกับการเลือกภาษา สามารถใช้โปรแกรม Python ที่ใช้งานได้ดีใน C ++ หรือ Java ในวิธีที่ดีกว่า (ใช้อัลกอริทึมเดียวกัน) และสิ่งนี้มีความสัมพันธ์กับการใช้คำฟุ่มเฟื่อยตามธรรมชาติของภาษาโปรแกรมบางภาษาหรือไม่?
35 java  c++  algorithms  python 

4
จะเปลี่ยนเป็น C ++ 11 ได้อย่างไร
ฉันเคยเขียนโปรแกรมใน C ++ มาระยะหนึ่งแล้ว แต่ส่วนใหญ่แล้วสิ่งที่อยู่ตรงกลางของคุณสมบัติระดับต่ำของ C ++ โดยที่ฉันหมายถึงส่วนใหญ่ทำงานร่วมกับพอยน์เตอร์และอาร์เรย์ดิบ ฉันคิดว่าพฤติกรรมนี้เรียกว่าการใช้ C ++ เป็น C กับคลาส อย่างไรก็ตามเรื่องนี้ฉันเพิ่งลอง C เป็นครั้งแรกเท่านั้น ฉันประหลาดใจอย่างมากที่ภาษาอย่าง C # และ Java ซ่อนรายละเอียดเหล่านี้ไว้ในห้องสมุดมาตรฐานที่สะดวกสบายเช่นพจนานุกรมและรายการ ฉันทราบว่าไลบรารีมาตรฐาน C ++ มีคอนเทนเนอร์มากมายเช่นเวกเตอร์, แผนที่และสตริงเช่นกันและ C ++ 11 จะเพิ่มเฉพาะสิ่งนี้โดยใช้ std :: array และลูป ranged ฉันจะเรียนรู้ที่จะใช้ประโยชน์จากคุณสมบัติภาษาสมัยใหม่เหล่านี้ได้อย่างไรและเหมาะสมที่สุดกับช่วงเวลาใด ถูกต้องหรือไม่ว่าวิศวกรรมซอฟต์แวร์ใน C ++ ปัจจุบันส่วนใหญ่ไม่มีการจัดการหน่วยความจำด้วยตนเอง สุดท้ายฉันควรใช้คอมไพเลอร์ตัวใดเพื่อสร้างมาตรฐานใหม่ให้ได้มากที่สุด Visual Studio มีเครื่องมือการดีบักที่ยอดเยี่ยม แต่ VS2012 ก็ดูเหมือนว่าจะมีการสนับสนุน C …
35 c++  c++11 

3
ข้อความที่ส่งผ่านใน OO คืออะไร?
ฉันได้เรียนรู้การเขียนโปรแกรม OO เป็นหลักใน C ++, C # และ Java ฉันคิดว่าฉันมีความเข้าใจเป็นอย่างดีเกี่ยวกับความเข้าใจของฉันเกี่ยวกับการห่อหุ้มการสืบทอดและความหลากหลาย (รวมถึงการอ่านคำถามจำนวนมากบนไซต์นี้) สิ่งหนึ่งที่ดูเหมือนจะปรากฏขึ้นที่นี่และมีแนวคิดของ "การส่งข้อความ" เห็นได้ชัดว่านี่คือสิ่งที่ไม่ได้ใช้ในขณะที่การเขียนโปรแกรม OO ในภาษาหลักของวันนี้ แต่ได้รับการสนับสนุนโดย Smalltalk คำถามของฉันคือ: ข้อความผ่านคืออะไร (มีคนให้ตัวอย่างที่เป็นประโยชน์ได้หรือไม่) มีการสนับสนุน "ข้อความส่งผ่าน" นี้ใน C ++, C # หรือ Java หรือไม่
35 java  c#  c++  object-oriented 

17
การสอน C ++ ให้กับนักเรียนมัธยมปลายเป็นครั้งแรก: จะวาดเส้นตรงได้อย่างไร
ฉันจะให้คำปรึกษากับทีมนักเรียนมัธยมปลายสำหรับการแข่งขันหุ่นยนต์ครั้งแรกทีมส่วนใหญ่ที่นี่พัฒนา [ซอฟต์แวร์หุ่นยนต์ของพวกเขาโดยใช้ C ++ สำหรับนักเรียนหลายคนในทีมนี่จะเป็นการแนะนำครั้งแรกในการเขียนโปรแกรม ฉันจะไม่เลือก C ++ สำหรับการสอนการเขียนโปรแกรมให้กับนักเรียนระดับมัธยมศึกษาตอนปลาย (เช่น Python หรือ Javascript จะง่ายกว่าที่ฉันคิด) แต่ตัวเลือกถูกตั้งไว้ ฉันต้องการสอนพวกเขาอย่างถูกต้อง C ++ (เช่นหลีกเลี่ยงการใช้ภาษา C / C ++ แบบผสมเช่น C +) แต่ฉันไม่ต้องการทำให้พวกมันกลัวด้วยความซับซ้อนที่ไม่จำเป็น สำหรับเรื่องที่: ฉันควรเริ่มใช้ STL ตั้งแต่วันแรกหรือไม่ vectorหรือเพียงแค่ติดกับอาร์เรย์มาตรฐาน? อาร์เรย์นั้นง่ายต่อการแนะนำ แต่ข้อผิดพลาดของตัวชี้อาจยากต่อการจับ สำหรับ I / O ฉันควรยึดติดcoutฯลฯ หรือคุณคิดว่าprintfจะเรียนรู้ได้ง่ายขึ้น? มีแหล่งข้อมูลออนไลน์สำหรับ C ++ ที่เหมาะสมที่จะใช้สำหรับผู้เรียนอายุน้อยหรือไม่? ขอบคุณ! แก้ไข : ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมมากมาย นอกเหนือจากAccelerated C …
35 c++ 

13
การปฏิบัติที่แย่ที่สุดใน C ++, ข้อผิดพลาดทั่วไป [ปิด]
หลังจากอ่านคำพูดที่โด่งดังของ Linus Torvaldsฉันสงสัยว่าจริงๆแล้วอะไรคือข้อผิดพลาดทั้งหมดของโปรแกรมเมอร์ใน C ++ ฉันไม่ได้อ้างถึง typos หรือโปรแกรมที่ไม่ดีตามที่ได้รับการรักษาในคำถามนี้และคำตอบของมันแต่สำหรับข้อผิดพลาดระดับสูงที่ไม่ได้ตรวจพบโดยคอมไพเลอร์และไม่ส่งผลให้เกิดข้อบกพร่องที่เห็นได้ชัดในตอนแรก สิ่งที่ไม่น่าจะเป็นใน C แต่น่าจะเกิดขึ้นใน C ++ โดยผู้มาใหม่ที่ไม่เข้าใจความหมายของรหัสทั้งหมด ฉันยังยินดีต้อนรับคำตอบที่ชี้ให้เห็นถึงประสิทธิภาพที่ลดลงอย่างมากซึ่งมักจะไม่เกิดขึ้น ตัวอย่างของสิ่งที่อาจารย์คนหนึ่งของฉันเคยบอกฉันเกี่ยวกับตัวแยกวิเคราะห์ LR (1) ที่ฉันเขียน: คุณใช้อินสแตนซ์ของการสืบทอดและเวอร์ชวลไลซ์ที่ไม่จำเป็นจำนวนมากเกินไป การสืบทอดทำให้การออกแบบมีความซับซ้อนมากขึ้น (และไม่มีประสิทธิภาพเนื่องจากระบบย่อย RTTI (การอนุมานชนิดรันไทม์) และดังนั้นจึงควรใช้เฉพาะเมื่อมีความเหมาะสมเท่านั้นเช่นสำหรับการกระทำในตารางแยก เนื่องจากคุณใช้เทมเพลตอย่างเข้มข้นคุณจึงไม่จำเป็นต้องรับมรดก "

10
การ“ กำหนดค่าเริ่มต้นตัวแปรเสมอ” นำไปสู่ข้อบกพร่องสำคัญที่ถูกซ่อนอยู่หรือไม่
หลักเกณฑ์ C ++ Core มีกฎES.20: เริ่มต้นวัตถุเสมอ หลีกเลี่ยงข้อผิดพลาดที่ใช้ก่อนกำหนดและพฤติกรรมที่ไม่ได้กำหนดไว้ หลีกเลี่ยงปัญหาเกี่ยวกับความเข้าใจในการเริ่มต้นที่ซับซ้อน ลดความซับซ้อนของการ refactoring แต่กฎนี้ไม่ได้ช่วยในการค้นหาข้อบกพร่องมันเพียงซ่อนพวกเขา สมมติว่าโปรแกรมมีพา ธ การประมวลผลซึ่งใช้ตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น มันเป็นข้อผิดพลาด พฤติกรรมที่ไม่ได้กำหนดไว้นอกจากนี้ยังหมายความว่ามีบางอย่างผิดปกติและโปรแกรมอาจไม่ตรงตามข้อกำหนดของผลิตภัณฑ์ เมื่อมันถูกนำไปใช้กับการผลิตอาจมีการสูญเสียเงินหรือแย่ลง เราจะตรวจสอบข้อบกพร่องได้อย่างไร เราเขียนแบบทดสอบ แต่การทดสอบไม่ครอบคลุมเส้นทางการดำเนินการ 100% และการทดสอบจะไม่ครอบคลุม 100% ของอินพุตโปรแกรม ยิ่งไปกว่านั้นแม้การทดสอบจะครอบคลุมเส้นทางการดำเนินการที่ผิดปกติ แต่ก็ยังสามารถผ่านได้ มันไม่ได้กำหนดพฤติกรรมหลังจากทั้งหมดตัวแปร uninitialized สามารถมีค่าที่ค่อนข้างถูกต้อง แต่นอกเหนือจากการทดสอบของเราเรามีคอมไพเลอร์ที่สามารถเขียนอะไรบางอย่างเช่น 0xCDCDCDCD ไปยังตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น สิ่งนี้จะช่วยปรับปรุงอัตราการตรวจจับของการทดสอบเล็กน้อย ยิ่งไปกว่านั้น - มีเครื่องมือเช่น Address Sanitizer ที่จะอ่านค่าหน่วยความจำที่ไม่ได้กำหนดค่าเริ่มต้นทั้งหมด และในที่สุดก็มีเครื่องวิเคราะห์แบบสแตติกซึ่งสามารถดูโปรแกรมและบอกว่ามีการอ่านก่อนตั้งค่าบนพา ธ การเรียกใช้งานนั้น ดังนั้นเราจึงมีเครื่องมือที่ทรงพลังมากมาย แต่ถ้าเราเริ่มต้นตัวแปร - sanitizers ไม่พบอะไรเลย int bytes_read = …
34 c++  c 

6
เมื่อใดที่คุณควรใช้ bools ใน C ++
เรามีงานที่มอบหมายสำหรับชั้นเรียนของเราซึ่งเราต้องสร้างเกมโอเอกซ์ ผู้คนชอบที่จะทำให้ตัวเองสับสนดังนั้นพวกเขาจึงเขียนเกมที่ซับซ้อนซึ่งรวมถึงเมนู ในตอนท้ายของเกมคุณต้องมีตัวเลือกให้เล่นอีกครั้งหรือออกจากโปรแกรม ฉันใช้intตัวแปรสำหรับเรื่องนั้น แต่ฉันสังเกตเห็นเพื่อนร่วมชั้นบางคนใช้บูล มันมีประสิทธิภาพมากกว่านี้ไหม? ความแตกต่างระหว่างการจัดเก็บคำตอบที่ควรเก็บค่าสองค่าในintแทนที่จะเก็บไว้ในบูลคืออะไร วัตถุประสงค์ที่แน่นอนของตัวแปรเหล่านี้คืออะไร?
34 c++  boolean 

9
สามารถใช้ C ++ เป็นภาษาพัฒนาเว็บฝั่งเซิร์ฟเวอร์ได้หรือไม่ [ปิด]
ฉันต้องการพัฒนาเว็บไซต์โดยใช้ C ++ เป็น "ภาษาสคริปต์" บนฝั่งเซิร์ฟเวอร์ โครงสร้างพื้นฐานเซิร์ฟเวอร์ของฉันใช้เป็น * nix ดังนั้นการทำการพัฒนาเว็บไซต์ใน C ++ บน Azure จึงไม่สามารถทำได้และ C ++ / CLI ASP.NET ก็ใช้ไม่ได้เช่นกัน แยกจากแอปพลิเคชั่น CGI รุ่นเก่าสามารถพัฒนาเว็บไซต์ด้วย C ++ ได้หรือไม่?

12
มันเป็นกลิ่นรหัสในการจัดเก็บวัตถุทั่วไปในภาชนะและจากนั้นรับวัตถุและทำให้วัตถุตกต่ำจากคอนเทนเนอร์?
ตัวอย่างเช่นฉันมีเกมที่มีเครื่องมือบางอย่างเพื่อเพิ่มความสามารถของผู้เล่น: Tool.h class Tool{ public: std::string name; }; และเครื่องมือบางอย่าง: Sword.h class Sword : public Tool{ public: Sword(){ this->name="Sword"; } int attack; }; Shield.h class Shield : public Tool{ public: Shield(){ this->name="Shield"; } int defense; }; MagicCloth.h class MagicCloth : public Tool{ public: MagicCloth(){ this->name="MagicCloth"; } int attack; int defense; }; …

3
ที่อยู่ C ++ 11 เกี่ยวข้องกับการส่งวัตถุ std lib ระหว่างขอบเขตไลบรารีแบบไดนามิก / ใช้ร่วมกันหรือไม่? (เช่นที่กำลังเป็นต้น)?
หนึ่งในข้อร้องเรียนหลักของฉันเกี่ยวกับ C ++ คือวิธียากในทางปฏิบัติก็คือการส่งวัตถุไลบรารี std นอกขอบเขตไลบรารีแบบไดนามิก (เช่น dll / ดังนั้น) ไลบรารี std มักเป็นส่วนหัวเท่านั้น ซึ่งเป็นสิ่งที่ดีสำหรับการเพิ่มประสิทธิภาพที่ยอดเยี่ยม อย่างไรก็ตามสำหรับ dll พวกเขามักจะสร้างด้วยการตั้งค่าคอมไพเลอร์ที่แตกต่างกันซึ่งอาจส่งผลกระทบต่อโครงสร้างภายใน / รหัสของคอนเทนเนอร์ไลบรารี std ตัวอย่างเช่นใน MSVC dll หนึ่งอาจสร้างขึ้นด้วยการดีบัก iterator ในขณะที่คนอื่นสร้างมันออก Dll ทั้งสองนี้อาจพบปัญหาในการส่งผ่านคอนเทนเนอร์มาตรฐาน หากฉันเปิดเผยstd::stringในส่วนต่อประสานของฉันฉันไม่สามารถรับประกันได้ว่ารหัสที่ลูกค้าใช้std::stringอยู่นั้นตรงกับห้องสมุดของฉันstd::stringทั้งหมด สิ่งนี้นำไปสู่ปัญหาการดีบักปัญหาปวดหัว ฯลฯ คุณควบคุมการตั้งค่าคอมไพเลอร์ในองค์กรของคุณอย่างแน่นหนาเพื่อป้องกันปัญหาเหล่านี้หรือคุณใช้อินเทอร์เฟซ C ที่ง่ายกว่าที่ไม่มีปัญหาเหล่านี้ หรือระบุให้กับลูกค้าของคุณถึงการตั้งค่าคอมไพเลอร์ที่คาดหวังที่พวกเขาควรใช้ (ซึ่งจะดูดถ้าห้องสมุดอื่นระบุการตั้งค่าคอมไพเลอร์อื่น ๆ ) คำถามของฉันคือ C ++ 11 พยายามทำสิ่งใดเพื่อแก้ไขปัญหาเหล่านี้หรือไม่
34 c++  libraries  c++11 

5
ฉันจะสร้างและบังคับใช้สัญญาเพื่อการยกเว้นได้อย่างไร
ฉันพยายามโน้มน้าวให้ทีมของฉันอนุญาตให้ใช้ข้อยกเว้นใน C ++ แทนการส่งคืนบูลisSuccessfulหรือ enum ด้วยรหัสข้อผิดพลาด อย่างไรก็ตามฉันไม่สามารถตอบโต้คำวิจารณ์ของเขาได้ พิจารณาห้องสมุดนี้: class OpenFileException() : public std::runtime_error { } void B(); void C(); /** Does blah and blah. */ void B() { // The developer of B() either forgot to handle C()'s exception or // chooses not to handle it and let it go …
33 c++  exceptions 

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