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

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

9
สำคัญอย่างไรที่คุณรู้มาตรฐาน C ++
ฉันลองค้นหา แต่ฉันไม่เห็นคำถามที่คล้ายกัน (ไม่ว่าจะเป็นหรือคำศัพท์การค้นหาของฉันไม่ถูกต้อง - ถ้าเป็นเช่นนั้นรู้สึกอิสระที่จะปิด) ฉันเป็นผู้ใช้ตัวยงของ SO และฉันสังเกตเห็นว่ามีการอ้างอิงจำนวนมากถึงมาตรฐาน C ++ ในการอภิปรายและคำตอบ - และฉันต้องยอมรับว่าฉันไม่เคยอ่านเอกสารนี้โดยเฉพาะภาษาทำให้ตาของฉันเจ็บ ... ดังนั้น คำถามคือนักพัฒนา C ++ สามารถสร้างรหัสสำหรับการอยู่อาศัยได้โดยไม่ต้องอ่านเอกสารนี้หรือไม่? มันสำคัญจริง ๆ สำหรับเราที่เป็นแค่มนุษย์ปุถุชนที่ไม่ได้อยู่ในธุรกิจการเขียนคอมไพเลอร์?
11 c++  standards 

4
C ++ Iterator ทำไมไม่มีคลาสพื้นฐานของ Iterator ตัววนซ้ำทั้งหมดที่สืบทอดมา
ฉันกำลังเรียนเพื่อสอบและฉันมีคำถามที่ฉันต้องดิ้นรนเพื่อให้และตอบคำถาม ทำไมคลาสพื้นฐานของตัววนซ้ำไม่มีอยู่ตัววนซ้ำอื่น ๆ ทั้งหมดจึงสืบทอดมา? ฉันเดาว่าครูของฉันกำลังอ้างถึงโครงสร้างลำดับชั้นจากการอ้างอิง cpp " http://prntscr.com/mgj542 " และเราต้องให้เหตุผลอื่นนอกเหนือจากเหตุผลที่ควรทำ ฉันรู้ว่าตัววนซ้ำคืออะไรและใช้ในการทำงานกับคอนเทนเนอร์ จากสิ่งที่ฉันเข้าใจเนื่องจากโครงสร้างข้อมูลพื้นฐานที่เป็นไปได้ที่แตกต่างกันคอนเทนเนอร์ที่แตกต่างกันมีตัววนซ้ำที่แตกต่างกันเนื่องจากคุณสามารถสุ่มเลือกอาเรย์ได้ แต่ไม่ใช่รายการที่เชื่อมโยงและคอนเทนเนอร์ที่แตกต่างกัน พวกเขาอาจเป็นแม่แบบพิเศษขึ้นอยู่กับคอนเทนเนอร์ใช่ไหม?
11 c++  iterator 

1
ย้ายความหมายใน C ++ - ย้ายกลับของตัวแปรท้องถิ่น
ความเข้าใจของฉันคือว่าใน C ++ 11 เมื่อคุณส่งคืนตัวแปรโลคัลจากฟังก์ชันตามค่าคอมไพเลอร์ได้รับอนุญาตให้จัดการกับตัวแปรนั้นเป็นการอ้างอิงค่า r-value และ 'ย้าย' ออกจากฟังก์ชันเพื่อส่งคืน (ถ้า RVO / NRVO ไม่ได้เกิดขึ้นแทนแน่นอน) คำถามของฉันคือจะไม่ทำลายรหัสที่มีอยู่นี้หรือไม่ พิจารณารหัสต่อไปนี้: #include <iostream> #include <string> struct bar { bar(const std::string& str) : _str(str) {} bar(const bar&) = delete; bar(bar&& other) : _str(std::move(other._str)) {other._str = "Stolen";} void print() {std::cout << _str << std::endl;} std::string _str; }; …
11 c++  c++11 

3
มันเป็นสิ่งสำคัญที่ทำให้งงงวยรหัสแอปพลิเคชัน C ++?
ในโลก Java ดูเหมือนว่าบางครั้งจะมีปัญหา แต่สิ่งที่เกี่ยวกับ C ++? มีวิธีแก้ไขปัญหาต่าง ๆ หรือไม่? ฉันคิดเกี่ยวกับความจริงที่ว่าบางคนสามารถแทนที่ไลบรารี C ++ ของระบบปฏิบัติการที่เฉพาะเจาะจงด้วยเวอร์ชันเดียวกันของไลบรารีเดียวกัน แต่เต็มไปด้วยสัญลักษณ์การดีบักเพื่อทำความเข้าใจว่าโค้ดของฉันทำอะไร การใช้ไลบรารีมาตรฐานหรือห้องสมุดยอดนิยมเป็นสิ่งที่ดีหรือไม่? สิ่งนี้สามารถเกิดขึ้นได้กับไลบรารี่ dll บางตัวใน Windows แทนที่ด้วย "debug version" ของไลบรารี่นั้น มันจะดีกว่าที่จะรวบรวมแบบคงที่? ในแอพพลิเคชั่นเชิงพาณิชย์ฉันเห็นว่าแกนหลักของแอพของพวกเขารวบรวมทุกอย่างในแบบสแตติกและส่วนใหญ่ dll (ไลบรารีไดนามิกทั่วไป) ใช้เพื่อเสนอเทคโนโลยีของบุคคลที่สามเช่นโซลูชั่นต่อต้านการละเมิดลิขสิทธิ์ (ฉันเห็นในเกมหลายเกม ), ไลบรารี GUI (เช่น Qt), ไลบรารี OS ฯลฯ การรวบรวมแบบคงที่เทียบเท่ากับการทำให้งงงวยในโลก Java หรือไม่? ในแง่ที่ดีกว่าเป็นวิธีที่ดีที่สุดและประหยัดที่สุดในการปกป้องรหัสของคุณหรือไม่?

5
วิธีแก้ปัญหาการพึ่งพาซึ่งกันและกันในรหัส C ++ ของฉันได้อย่างไร
ใน C ++ โครงการของฉันฉันมีสองชั้นและParticle ContactในParticleระดับที่ฉันมีตัวแปรสมาชิกstd::vector<Contact> contactsที่มีรายชื่อทั้งหมดของParticleวัตถุและสอดคล้องฟังก์ชันสมาชิกและgetContacts() addContact(Contact cont)ดังนั้นใน "Particle.h" ฉันรวม "Contact.h" ในContactชั้นเรียนฉันต้องการเพิ่มรหัสไปยังตัวสร้างContactที่จะเรียกParticle::addContact(Contact cont)เพื่อให้contactsมีการปรับปรุงสำหรับParticleวัตถุทั้งสองระหว่างContactวัตถุที่จะถูกเพิ่ม ดังนั้นฉันจะต้องรวม "Particle.h" ใน "Contact.cpp" คำถามของฉันคือสิ่งนี้เป็นที่ยอมรับ / ฝึกการเขียนโปรแกรมที่ดีหรือไม่และหากไม่มีสิ่งใดจะเป็นวิธีที่ดีกว่าที่จะใช้สิ่งที่ฉันพยายามทำให้สำเร็จ (เพียงแค่อัปเดตรายชื่อผู้ติดต่อสำหรับอนุภาคเฉพาะโดยอัตโนมัติ ถูกสร้าง) คลาสเหล่านี้จะถูกผูกเข้าด้วยกันโดยNetworkคลาสที่จะมี N particles ( std::vector<Particle> particles) และ Nc contact ( std::vector<Contact> contacts) แต่ฉันต้องการที่จะมีฟังก์ชั่นเช่นparticles[0].getContacts()- มันไม่เป็นไรที่จะมีฟังก์ชั่นดังกล่าวในParticleชั้นเรียนในกรณีนี้หรือมีโครงสร้าง "เชื่อมโยง" ที่ดีขึ้นใน C ++ สำหรับวัตถุประสงค์นี้ (ของสองคลาสที่เกี่ยวข้องที่ใช้ในชั้นเรียนอื่น) . ฉันอาจต้องเปลี่ยนมุมมองที่นี่ในวิธีที่ฉันเข้าใกล้นี้ เนื่องจากทั้งสองคลาสเชื่อมต่อกันด้วยNetworkอ็อบเจกต์คลาสเป็นรหัสองค์กร / คลาสทั่วไปที่มีข้อมูลการเชื่อมต่อที่ควบคุมโดยNetworkวัตถุทั้งหมด (ในที่วัตถุ Particle ไม่ควรรับรู้รายชื่อผู้ติดต่อและดังนั้นจึงไม่ควรมีgetContacts()สมาชิก …

3
การพึ่งพาการฉีด: ฉันควรสร้างคลาสรถยนต์เพื่อเก็บชิ้นส่วนทั้งหมดหรือไม่
ฉันมีรถยนต์มากมายในแอปพลิเคชัน C ++ ของฉันซึ่งบรรจุอยู่ภายใน RaceTrack รถแต่ละคันประกอบด้วยชิ้นส่วนหลายร้อยชิ้น แต่ละส่วนขึ้นอยู่กับส่วนอื่น ๆ หรือสอง ฉันได้อ่านคำถามมากมายเกี่ยวกับ DI และหนังสือของ Mark Seemann และดูเหมือนว่าฉันไม่ควรกำหนดคลาสรถยนต์เพื่อเก็บชิ้นส่วนรถยนต์เพราะชิ้นส่วนรถยนต์ทั้งหมดจะขึ้นอยู่กับแต่ละชิ้นและชิ้นส่วนซุปนี้เป็นรถยนต์ ฉันถูกไหม? ดังนั้นเมื่อฉันวางรถแข่งทั้งหมดของฉันลงใน RaceTrack จะไม่มีเอนทิตีของรถยนต์ แต่มีชิ้นส่วนรถยนต์มากมายขึ้นอยู่กับการแข่งรถในแต่ละแทร็ค? ฉันถูกไหม? แก้ไข: สำหรับทุกวัยที่ฉันเขียนโปรแกรมคลาสรถยนต์เพราะเห็นได้ชัดว่าฉันต้องการคลาสรถยนต์หากฉันเขียนโปรแกรมตรรกะรถ แต่ด้วย DI มันไม่ชัดเจนสำหรับฉัน ยังสงสัยว่ามันเป็นสำนวนที่ DI จะไม่สร้างคลาสรถถ้าฉันไม่มีบทบาทที่กำหนดไว้หรือไม่? ฉันหมายความว่ามันโอเคที่จะมีพวงมาลัยล้อเลื่อนสำหรับการขับขี่ BoltsAndNuts บนล้อสำหรับลูกเรือหลุมและอินเทอร์เฟซตลกอื่น ๆ ทุกประเภทโดยไม่ต้องมีอินสแตนซ์ที่แสดงถึงรถยนต์โดยรวมหรือไม่?

5
การเพิ่มประสิทธิภาพการจัดสรรสตริงที่ซ้ำซ้อนใน C ++
ฉันมีองค์ประกอบ C ++ ที่ค่อนข้างซับซ้อนซึ่งประสิทธิภาพได้กลายเป็นปัญหา การทำโปรไฟล์แสดงให้เห็นว่าเวลาดำเนินการส่วนใหญ่นั้นใช้เพียงการจัดสรรหน่วยความจำสำหรับstd::strings เท่านั้น ฉันรู้ว่ามีจำนวนมากซ้ำซ้อนในสายเหล่านั้น ค่าจำนวนเล็กน้อยทำซ้ำบ่อยมาก แต่ก็มีค่าที่ไม่ซ้ำกันจำนวนมาก โดยทั่วไปแล้วสตริงค่อนข้างสั้น ตอนนี้ฉันแค่คิดว่ามันจะทำให้รู้สึกถึงการใช้ซ้ำการจัดสรรบ่อยเหล่านั้นอย่างใด แทนที่จะเป็น 1,000 พอยน์เตอร์ถึง 1,000 ค่า "foobar" ที่แตกต่างกันฉันสามารถมี 1,000 พอยน์เตอร์ต่อหนึ่งค่า "foobar" ความจริงที่ว่านี้จะมีประสิทธิภาพมากขึ้นของหน่วยความจำเป็นโบนัสที่ดี แต่ฉันส่วนใหญ่กังวลเกี่ยวกับความล่าช้าที่นี่ ฉันเดาว่าตัวเลือกหนึ่งจะรักษารีจิสทรีของค่าที่จัดสรรไว้บางส่วน แต่เป็นไปได้หรือไม่ที่จะทำให้การค้นหารีจิสทรีเร็วขึ้นกว่าการจัดสรรหน่วยความจำซ้ำซ้อน นี่เป็นวิธีที่ปฏิบัติได้หรือไม่?

3
หลีกเลี่ยงการก่อสร้างที่มีข้อโต้แย้งมากมาย
ดังนั้นฉันจึงมีโรงงานที่สร้างวัตถุของคลาสที่แตกต่างกัน คลาสที่เป็นไปได้ทั้งหมดมาจากบรรพบุรุษที่เป็นนามธรรม โรงงานมีไฟล์กำหนดค่า (ไวยากรณ์ JSON) และตัดสินใจว่าจะสร้างคลาสใดขึ้นอยู่กับการกำหนดค่าของผู้ใช้ เพื่อให้บรรลุสิ่งนี้โรงงานใช้ boost :: property_tree สำหรับ JSON-parsing เขาเดินผ่านต้นไม้ต้นทรีและตัดสินใจเลือกวัตถุที่เป็นรูปธรรมเพื่อสร้าง อย่างไรก็ตามผลิตภัณฑ์วัตถุมีหลายฟิลด์ (คุณลักษณะ) วัตถุมีคุณสมบัติประมาณ 5-10 ตัวในอนาคตอาจมีมากกว่านี้ขึ้นอยู่กับคลาสที่เป็นรูปธรรม ดังนั้นฉันไม่แน่ใจว่าตัวสร้างของวัตถุควรมีลักษณะอย่างไร ฉันสามารถคิดถึงวิธีแก้ปัญหาสองข้อ: 1) ตัวสร้างของผลิตภัณฑ์คาดว่าทุกแอตทริบิวต์เป็นพารามิเตอร์ดังนั้นตัวสร้างจะลงท้ายด้วยพารามิเตอร์ 10+ สิ่งนี้จะน่าเกลียดและนำไปสู่บรรทัดโค้ดที่ยาวและอ่านไม่ได้ อย่างไรก็ตามข้อดีคือโรงงานสามารถแยกวิเคราะห์ JSON และเรียกใช้ตัวสร้างด้วยพารามิเตอร์ที่ถูกต้อง คลาสผลิตภัณฑ์ไม่จำเป็นต้องรู้ว่าถูกสร้างขึ้นเนื่องจากการกำหนดค่า JSON ไม่จำเป็นต้องรู้ว่ามี JSON หรือการกำหนดค่าที่เกี่ยวข้องเลย 2) คอนสตรัคเตอร์ของผลิตภัณฑ์คาดว่าจะมีอาร์กิวเมนต์เดียวคือออบเจ็กต์ property_tree จากนั้นมันก็สามารถแยกวิเคราะห์ข้อมูลที่จำเป็น หากข้อมูลในการกำหนดค่าขาดหายไปหรือไม่อยู่ในขอบเขตของแต่ละคลาสผลิตภัณฑ์สามารถตอบสนองได้อย่างถูกต้อง โรงงานไม่จำเป็นต้องทราบว่าผลิตภัณฑ์หลายตัวต้องการข้อโต้แย้งใด โรงงานยังไม่จำเป็นต้องรู้วิธีการตอบสนองในกรณีที่มีการกำหนดค่าผิดพลาด และอินเทอร์เฟซตัวสร้างเป็นปึกแผ่นและเล็ก แต่ในฐานะที่เป็นข้อเสียผลิตภัณฑ์จำเป็นต้องดึงข้อมูลที่ต้องการจาก JSON ดังนั้นจึงรู้ได้ว่ามันถูกสร้างขึ้นอย่างไร ฉันมักจะชอบโซลูชัน 2) อย่างไรก็ตามฉันไม่แน่ใจว่านี่เป็นรูปแบบโรงงานที่ดีหรือไม่ รู้สึกผิดอย่างใดอย่างหนึ่งที่ทำให้ผลิตภัณฑ์ทราบว่าสร้างขึ้นด้วยการกำหนดค่า JSON ในอีกด้านหนึ่งผลิตภัณฑ์ใหม่สามารถแนะนำง่ายมาก ความคิดเห็นใด …

2
ข้อดีของความหมายของ copy-on-write
ฉันสงสัยว่าการทำสำเนาการเขียนมีประโยชน์อะไรบ้าง โดยธรรมชาติแล้วฉันไม่ได้คาดหวังกับความคิดเห็นส่วนตัว แต่เป็นสถานการณ์จริงที่สามารถนำไปใช้ได้จริงในทางที่เป็นรูปธรรมและเป็นประโยชน์ และโดยจับต้องได้ฉันหมายถึงบางสิ่งที่มากกว่าการช่วยให้คุณพิมพ์&อักขระได้ เพื่อชี้แจงคำถามนี้อยู่ในบริบทของประเภทข้อมูลที่การสร้างการมอบหมายหรือคัดลอกสร้างสำเนาตื้นโดยปริยาย แต่การแก้ไขมันจะสร้างสำเนาลึกโดยนัยและใช้การเปลี่ยนแปลงไปแทนวัตถุต้นฉบับ เหตุผลที่ฉันถามคือฉันดูเหมือนจะไม่พบข้อดีของการมี COW เป็นพฤติกรรมเริ่มต้นโดยปริยาย ฉันใช้ Qt ซึ่งมีการใช้งาน COW สำหรับประเภทข้อมูลจำนวนมากซึ่งเกือบทั้งหมดมีพื้นที่จัดเก็บข้อมูลที่จัดสรรแบบไดนามิก แต่มันมีประโยชน์ต่อผู้ใช้อย่างไรจริงๆ? ตัวอย่าง: QString s("some text"); QString s1 = s; // now both s and s1 internally use the same resource qDebug() << s1; // const operation, nothing changes s1[o] = z; // s1 "detaches" from s, …
10 c++  qt 

1
Message Queue สำหรับ RTOS สำหรับไมโครคอนโทรลเลอร์
ฉันกำลังเขียน RTOS สำหรับไมโครคอนโทรลเลอร์ สิ่งทั้งหมดเขียนใน C ++ 11 - ถ้าใครสนใจและลิงค์ไปยังที่เก็บอยู่ด้านล่าง ขณะนี้ฉันกำลังเขียนคลาสที่เป็นคิวข้อมูลแบบง่ายสำหรับการส่งวัตถุระหว่างเธรด (หรือระหว่างตัวจัดการอินเตอร์รัปต์และเธรดหรือตัวจัดการอินเตอร์รัปต์และตัวจัดการอินเตอร์รัปต์อื่น) โดยปกติฉันพยายามติดตาม API ทั่วไปที่พบในโครงการอื่น ๆ แต่ฉันไม่พบตัวอย่างของคิวที่เกิดขึ้นพร้อมกันที่มีemplace()ฟังก์ชันและรองรับการหมดเวลา "ปัญหา" ทั่วไปของฉันคือฉันไม่สามารถตัดสินใจระหว่างสองอินเตอร์เฟส: ( std::chrono::duration<Rep, Period>เป็นเทมเพลตฉันละเว้นเทมเพลตสำเร็จรูปเพื่อความชัดเจน) รุ่นแรก: template<typename T> class FifoQueue { public: ... template<typename... Args> int tryEmplaceFor(std::chrono::duration<Rep, Period>, Args&&... args); int tryPopFor(T&, std::chrono::duration<Rep, Period>); int tryPushFor(const T&, std::chrono::duration<Rep, Period>); int tryPushFor(T&&, std::chrono::duration<Rep, Period>); ... …

1
เหตุใด GCC จึงเปลี่ยนจากวัวกระทิงเป็นตัวแยกวิเคราะห์แบบสืบซ้ำสำหรับ C ++ และ C
มีการเปลี่ยนแปลงภาษาที่ต้องใช้หรือมีเหตุผลบางอย่างที่ทำไมกระทิงจึงไม่เหมาะสมหรือเหมาะสมที่สุด? ฉันเห็นวิกิพีเดียว่าพวกเขาเปลี่ยนไปอ้างอิงถึงบันทึกย่อประจำรุ่นGCC 3.4และGCC 4.1 สถานะรีลีสโน้ตเหล่านี้: ตัวแยกวิเคราะห์ C ++ purser แบบเขียนซ้ำด้วยมือได้แทนที่ตัวแยกวิเคราะห์ C ++ ที่ได้จาก YACC จาก GCC รุ่นก่อนหน้า parser ใหม่มีโครงสร้างพื้นฐานที่พัฒนาขึ้นอย่างมากซึ่งจำเป็นสำหรับการแยกวิเคราะห์ซอร์สโค้ด C ++ ที่ดีขึ้นการจัดการส่วนขยายและการแยกที่สะอาด (ถ้าเป็นไปได้) ระหว่างการวิเคราะห์ซีแมนทิกส์ที่เหมาะสมและการแยกวิเคราะห์ parser ใหม่แก้ไขข้อบกพร่องมากมายที่พบใน parser เก่า และ: ตัวแยกวิเคราะห์ C และ Objective-C แบบเก่าของ Bison ถูกแทนที่ด้วยตัวแยกวิเคราะห์แบบเรียกซ้ำแบบสืบพันธุ์แบบเขียนด้วยมือที่เร็วขึ้น สิ่งที่ฉันอยากรู้คือปัญหาที่แท้จริงของพวกเขาคืออะไรและทำไมจึงเป็นไปไม่ได้ / วิธีแก้ปัญหาโดยใช้วัวกระทิง
10 c++  c  parsing  compiler 

5
มีข้อ จำกัด ทางเทคนิคหรือคุณสมบัติภาษาที่ป้องกันไม่ให้สคริปต์ Python ของฉันเร็วเท่ากับโปรแกรม C ++ ที่เทียบเท่าหรือไม่
ฉันเป็นผู้ใช้ Python มาเป็นเวลานาน ไม่กี่ปีที่ผ่านมาฉันเริ่มเรียนรู้ C ++ เพื่อดูว่ามันสามารถให้อะไรในแง่ของความเร็ว ในช่วงเวลานี้ฉันจะใช้ Python เป็นเครื่องมือในการสร้างต้นแบบต่อไป ดูเหมือนว่านี่เป็นระบบที่ดี: การพัฒนาที่คล่องตัวด้วย Python การดำเนินการที่รวดเร็วใน C ++ เมื่อเร็ว ๆ นี้ฉันใช้ Python มากขึ้นอีกครั้งและเรียนรู้วิธีหลีกเลี่ยงข้อผิดพลาดและรูปแบบการต่อต้านทั้งหมดที่ฉันใช้อย่างรวดเร็วในปีก่อน ๆ กับภาษา ฉันเข้าใจว่าการใช้คุณสมบัติบางอย่าง (รายการความเข้าใจการแจกแจง ฯลฯ ) สามารถเพิ่มประสิทธิภาพได้ แต่มีข้อ จำกัด ทางเทคนิคหรือคุณสมบัติภาษาที่ป้องกันไม่ให้สคริปต์ Python ของฉันเร็วเท่ากับโปรแกรม C ++ ที่เทียบเท่ากันหรือไม่

1
“ เทมเพลต C ++: คู่มือฉบับสมบูรณ์” (c) 2002 - รุ่นล่าสุดด้วย C ++ 11?
เทมเพลต C ++หนังสือ: คู่มือฉบับสมบูรณ์ , (c) 2002, ดูน่าสนใจสำหรับฉันมาก, แต่เนื่องจากอายุ 12 ปี, ฉันกังวลว่ามันอาจล้าสมัย มีบทวิจารณ์ของ Amazon ที่ได้รับความนิยมสูงเมื่อเร็ว ๆ นี้เมื่อปีที่แล้วและฉันไม่เห็นชื่อเรื่องล่าสุดในเทมเพลต C ++ ไม่มีใครรู้ว่าหนังสือเกี่ยวกับเทมเพลตที่ตีพิมพ์ในปี 2002 (ตรงข้ามกับหนังสือโดยเฉพาะเกี่ยวกับ STL) จะมีไวยากรณ์หรือแนวคิดที่ถูกแทนที่หรือเพิ่มโดยพูด C ++ 11 ไหม ต่อไปนี้มาจากคำอธิบายหนังสือของ Amazon : เทมเพลตเป็นหนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ C ++ แต่บ่อยครั้งที่พวกเขาถูกทอดทิ้งถูกเข้าใจผิดและใช้ผิดประเภท เทมเพลต C ++: คู่มือฉบับสมบูรณ์ช่วยให้สถาปนิกและวิศวกรซอฟต์แวร์เข้าใจอย่างชัดเจนว่าทำไมเมื่อใดและอย่างไรถึงจะใช้เทมเพลตเพื่อสร้างและบำรุงรักษาซอฟต์แวร์ที่สะอาดขึ้นเร็วขึ้นและชาญฉลาดยิ่งขึ้น เทมเพลต C ++ เริ่มต้นด้วยการสอนที่ลึกซึ้งเกี่ยวกับแนวคิดพื้นฐานและคุณสมบัติด้านภาษา ส่วนที่เหลือของหนังสือเล่มนี้เป็นข้อมูลอ้างอิงที่ครอบคลุมโดยมุ่งเน้นที่รายละเอียดภาษาก่อนจากนั้นจึงใช้เทคนิคการเข้ารหัสที่หลากหลายและในที่สุดแอปพลิเคชันขั้นสูงสำหรับแม่แบบ ตัวอย่างที่ใช้ในหนังสือแสดงแนวคิดที่เป็นนามธรรมและแสดงให้เห็นถึงแนวปฏิบัติที่ดีที่สุด ผู้อ่านเรียนรู้ พฤติกรรมที่แน่นอนของแม่แบบ วิธีหลีกเลี่ยงข้อผิดพลาดที่เกี่ยวข้องกับแม่แบบ สำนวนและเทคนิคต่าง ๆ …
10 c++  templates 

2
การทดสอบหน่วยผลรหัสหนักด้าน
ฉันเริ่มเขียนรหัส C ++ เพื่อเรียกใช้หุ่นยนต์และฉันไม่ทราบวิธีรวมการทดสอบหน่วยหากฉันสามารถทำได้ ฉันได้รับห้องสมุดที่อนุญาตให้สร้าง "คำสั่ง" สำหรับหุ่นยนต์ซึ่งมีกำหนดและดำเนินการโดยอัตโนมัติ กลไกในการสร้างคำสั่งเหล่านี้เป็นประเภทรองชั้นฐานคำสั่งพวกเขาให้และดำเนินการเสมือนvoid Initialize(), void Execute()และvoid End()วิธีการ ฟังก์ชั่นเหล่านี้ทำงานอย่างหมดจดสำหรับผลข้างเคียงซึ่งทำสิ่งต่าง ๆ กับหุ่นยนต์ (วิ่งมอเตอร์ยืดลูกสูบ ฯลฯ ) ด้วยเหตุนี้ฉันไม่เห็นที่ใดก็ได้ในการแนบการทดสอบหน่วยกับโค้ดขาดการเยาะเย้ยห้องสมุดทั้งหมดเพื่อให้ฉันสามารถตรวจสอบเสมือนก่อนและหลังสถานะของหุ่นยนต์ มีวิธีทดสอบหน่วยที่ไม่เป็นภาระมากเกินไปหรือไม่ แก้ไข ฉันคิดว่าฉันเข้าใจผิดเกี่ยวกับการทำงานของห้องสมุด ห้องสมุดมีส่วนต่อประสานกับหุ่นยนต์เป็นส่วนใหญ่รวมถึงระบบคำสั่ง / การตั้งเวลาดังนั้นมันจึงไม่ง่ายเท่ากับการเยาะเย้ยคลาสฐานคำสั่ง ฉันโชคไม่ดีที่ไม่มีเวลาทำเช่นนั้น

7
ฉันเชื่อว่าฉันมีรหัส C และ C ++ ผสมกันเมื่อฉันไม่ควรมี; นี่เป็นปัญหาและวิธีแก้ไขหรือไม่
พื้นหลัง / สถานการณ์ ฉันเริ่มเขียนแอปพลิเคชัน CLI อย่างหมดจดใน C (โปรแกรม C หรือ C ++ ที่เหมาะสมครั้งแรกของฉันที่ไม่ใช่ "Hello World" หรือรูปแบบอื่น ๆ ของมัน) ประมาณครึ่งทางผ่านฉันทำงานกับ "สตริง" ของอินพุตของผู้ใช้ (อาร์เรย์อาร์เรย์) และฉันค้นพบวัตถุลำแสงสตริง C ++ ฉันเห็นว่าฉันสามารถบันทึกรหัสโดยใช้สิ่งเหล่านี้ได้ดังนั้นฉันจึงใช้มันผ่านแอปพลิเคชัน ซึ่งหมายความว่าฉันมีการเปลี่ยนแปลงนามสกุลไฟล์ที่จะ .cpp และตอนนี้รวบรวม app กับแทนg++ gccดังนั้นตามนี้ฉันจะบอกว่าแอปพลิเคชันตอนนี้เป็นแอปพลิเคชั่นทางเทคนิค C ++ (แม้ว่า 90% + ของรหัสจะถูกเขียนในสิ่งที่ฉันจะเรียก C เนื่องจากมีการข้ามไปมาระหว่างสองภาษาจำนวนมาก ทั้งสอง). เป็นไฟล์. cpp ไฟล์เดียวยาวประมาณ 900 บรรทัด ปัจจัยสำคัญ ฉันต้องการให้โปรแกรมฟรี (เป็นเงิน) และสามารถแจกจ่ายได้อย่างอิสระและใช้ได้สำหรับทุกคน …
10 c++  c 

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