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

C ++ 11 เป็นชื่อของมาตรฐาน C ++ ที่ได้รับการอนุมัติในปี 2011 มันแทนที่มาตรฐาน C ++ 03 ก่อนหน้าเพิ่มการเปลี่ยนแปลงและแก้ไขภาษาคอร์ต่างๆรวมถึงไลบรารีมาตรฐานที่ได้รับการปรับปรุงและขยาย

3
การทำลายรายการใหญ่จะล้นสแต็กของฉันหรือไม่
พิจารณาการใช้งานรายการที่เชื่อมโยงโดยลำพังดังต่อไปนี้: struct node { std::unique_ptr<node> next; ComplicatedDestructorClass data; } ทีนี้สมมติว่าฉันหยุดใช้std::unique_ptr<node> headอินสแตนซ์ที่เกินขอบเขตแล้วทำให้ destructor ของมันถูกเรียก สิ่งนี้จะทำให้สแตกของฉันสำหรับรายการขนาดใหญ่เพียงพอหรือไม่ มันยุติธรรมที่จะคิดว่าคอมไพเลอร์จะทำเพิ่มประสิทธิภาพซับซ้อนสวย (อินไลน์unique_ptr's destructor เข้าnode' s แล้วใช้ recursion หาง) ซึ่งได้รับยากมากถ้าผมทำต่อไปนี้ (ตั้งแต่datadestructor จะทำให้งงงวยnext's ทำให้มันยาก เพื่อให้คอมไพเลอร์สังเกตเห็นโอกาสการเรียงลำดับใหม่และโอกาสในการโทรหาง): struct node { std::shared_ptr<node> next; ComplicatedDestructorClass data; } ถ้าdataอย่างใดมีตัวชี้ไปnodeแล้วก็อาจเป็นไปไม่ได้สำหรับการเรียกซ้ำหาง (แม้ว่าแน่นอนเราควรพยายามหลีกเลี่ยงการละเมิด encapsulation ดังกล่าว) โดยทั่วไปแล้วเราจะทำลายรายการนี้ได้อย่างไร? เราไม่สามารถข้ามผ่านรายการและลบโหนด "ปัจจุบัน" เนื่องจากตัวชี้ที่ใช้ร่วมกันไม่มีrelease! วิธีเดียวคือกับตัวกำหนดเองซึ่งส่งกลิ่นให้ฉันจริงๆ

4
การใช้ชื่ออักขระสากลในตัวระบุใน C ++ คืออะไร
c ++ มาตรฐาน (ผมสังเกตเห็นมันในหนึ่งใหม่ แต่มันก็มีอยู่แล้วใน C ++ 03) ระบุชื่อตัวละครสากลเขียนเป็น\uNNNNและ\UNNNNNNNNคิดเป็นตัวละครที่มี codepoints Unicode /NNNN NNNNNNNNสิ่งนี้มีประโยชน์กับตัวอักษรสตริงโดยเฉพาะอย่างยิ่งเนื่องจากมีการกำหนดตัวอักษรสตริง UTF-8, UTF-16 และ UCS-4 อย่างชัดเจน อย่างไรก็ตามอนุญาตให้ใช้ตัวอักษรสากลได้ในตัวระบุ แรงจูงใจเบื้องหลังคืออะไร? เห็นได้ชัดว่าไวยากรณ์นั้นไม่สามารถอ่านได้อย่างสมบูรณ์ตัวระบุอาจถูกจับคู่กับลิงเกอร์และมันก็ไม่เหมือนกับว่ามีฟังก์ชั่นมาตรฐานใด ๆ ในการดึงสัญลักษณ์ตามชื่ออย่างไรก็ตาม ดังนั้นทำไมทุกคนจะใช้ตัวระบุที่มีตัวอักษรสากลในนั้น แก้ไข: เนื่องจากมีอยู่จริงใน C ++ 03 แล้วคำถามเพิ่มเติมจะเป็นอย่างไรถ้าคุณเห็นรหัสที่ใช้จริงหรือไม่
11 c++  c++11 

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 

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>); ... …

4
เป็นวิธีที่ดีในการแสดงความสัมพันธ์แบบหลายต่อหลายระหว่างสองชั้นคืออะไร?
สมมติว่าฉันมีวัตถุสองชนิดคือ A และ B ความสัมพันธ์ระหว่างพวกมันมีมาก - ต่อ - กลุ่ม แต่ไม่มีพวกมันเป็นเจ้าของอีกคน อินสแตนซ์ A และ B ทั้งสองจำเป็นต้องตระหนักถึงการเชื่อมต่อ มันไม่ใช่แค่ทางเดียว ดังนั้นเราสามารถทำสิ่งนี้: class A { ... private: std::vector<B *> Bs; } class B { private: std::vector<A *> As; } คำถามของฉันคือ:ฉันจะวางฟังก์ชันเพื่อสร้างและทำลายการเชื่อมต่อที่ไหน? ควรเป็น A :: Attach (B) ซึ่งจะอัพเดท A :: Bs และ B :: เป็นเวกเตอร์หรือไม่ หรือควรเป็น B …
10 c++  c++11 

3
C ++: Metaprogramming ด้วย API คอมไพเลอร์มากกว่าด้วยคุณสมบัติ C ++
สิ่งนี้เริ่มต้นจากคำถาม SO แต่ฉันรู้ว่ามันค่อนข้างแปลกใหม่และตามคำอธิบายที่แท้จริงบนเว็บไซต์มันอาจจะเหมาะกว่าสำหรับ programmers.se เนื่องจากคำถามมีน้ำหนักเชิงแนวคิดจำนวนมาก ฉันได้เรียนรู้เสียงดังกังวาน LibToolingและเป็นเครื่องมือที่มีประสิทธิภาพมากที่สามารถเปิดเผย "nitty gritty" ทั้งหมดของรหัสด้วยวิธีที่เป็นมิตรกล่าวคือในทางที่เป็นความหมายและไม่ต้องเดาด้วยเช่นกัน ถ้าเสียงดังกราวสามารถรวบรวมรหัสของคุณแล้วเสียงดังกราวเป็นบางอย่างเกี่ยวกับความหมายของตัวละครทุกตัวเดียวภายในรหัสว่า ตอนนี้ให้ฉันถอยกลับสักครู่ มีปัญหาในทางปฏิบัติมากมายที่เกิดขึ้นเมื่อมีคนเข้าร่วมในเทมเพลต metaprogramming เทมเพลต C ++ (และโดยเฉพาะอย่างยิ่งเมื่อมีการใช้เทมเพลตเกินกว่าเทมเพลตเข้าไปในอาณาเขตของมาโครที่ชาญฉลาด ตามจริงแล้วสำหรับโปรแกรมเมอร์หลาย ๆ คนรวมถึงตัวเองการใช้งานเทมเพลตทั่วไปจำนวนมากก็ค่อนข้างน่ากลัวเช่นกัน ผมคิดว่าเป็นตัวอย่างที่ดีจะเป็นสตริงเวลารวบรวม นี่เป็นคำถามที่มีอายุเกินหนึ่งปีแล้ว แต่เป็นที่ชัดเจนว่า C ++ ณ ตอนนี้ไม่ได้ทำให้เป็นเรื่องง่ายสำหรับมนุษย์ปุถุชน ในขณะที่ดูตัวเลือกเหล่านี้ยังไม่เพียงพอที่จะทำให้เกิดอาการคลื่นไส้สำหรับฉัน แต่ก็ทำให้ฉันไม่มั่นใจเกี่ยวกับความสามารถในการสร้างรหัสเครื่องจักรที่มีประสิทธิภาพและมีประสิทธิภาพสูงสุดเพื่อให้เหมาะกับแอปพลิเคชันแฟนซีที่ฉันมีสำหรับซอฟต์แวร์ของฉัน ฉันหมายความว่าเรามาเจอกันคนอื่น ๆ สตริงนั้นค่อนข้างเรียบง่ายและเรียบง่าย พวกเราบางคนแค่ต้องการวิธีที่สะดวกในการปล่อยรหัสเครื่องที่มีสตริง "อบใน" อย่างมีนัยสำคัญมากกว่าที่เราจะได้รับเมื่อทำการเข้ารหัสในลักษณะที่ตรงไปตรงมา ในรหัส C ++ ของเรา ป้อน clang และ LibTooling ซึ่งแสดงแผนผังต้นไม้นามธรรม (AST) ของซอร์สโค้ดและอนุญาตให้แอปพลิเคชัน C ++ แบบกำหนดเองอย่างง่าย …

2
นี่เป็นวิธีที่ดีสำหรับลำดับชั้นของคลาส“ pImpl” ใน C ++ หรือไม่
ฉันมีลำดับชั้นเรียนที่ฉันต้องการแยกอินเทอร์เฟซจากการใช้งาน โซลูชันของฉันคือการมีสองลำดับชั้น: ลำดับชั้นของการจัดการสำหรับอินเทอร์เฟซและลำดับชั้นของคลาสที่ไม่เป็นสาธารณะสำหรับการนำไปใช้ คลาสตัวจัดการพื้นฐานมีตัวชี้การใช้งานซึ่งคลาสตัวจัดการที่ได้รับมาส่งไปยังตัวชี้ของชนิดที่ได้รับ (ดูฟังก์ชันgetPimpl()) นี่คือภาพร่างของโซลูชันของฉันสำหรับคลาสพื้นฐานที่มีสองคลาสที่ได้รับ มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม? ไฟล์ "Base.h": #include <memory> class Base { protected: class Impl; std::shared_ptr<Impl> pImpl; Base(Impl* pImpl) : pImpl{pImpl} {}; ... }; class Derived_1 final : public Base { protected: class Impl; inline Derived_1* getPimpl() const noexcept { return reinterpret_cast<Impl*>(pImpl.get()); } public: Derived_1(...); void func_1(...) const; …
9 design  c++  c++11 

1
ตรวจสอบการออกแบบการทำให้เป็นอนุกรม C ++
ฉันกำลังเขียนแอปพลิเคชัน C ++ แอปพลิเคชันส่วนใหญ่อ่านและเขียนข้อมูลที่จำเป็นและนี่ก็ไม่มีข้อยกเว้น ฉันสร้างการออกแบบระดับสูงสำหรับตัวแบบข้อมูลและตรรกะการทำให้เป็นอนุกรม คำถามนี้ขอให้ตรวจสอบการออกแบบของฉันโดยคำนึงถึงเป้าหมายเฉพาะเหล่านี้: เพื่อให้มีวิธีที่ง่ายและยืดหยุ่นในการอ่านและเขียนข้อมูลในรูปแบบที่กำหนดเอง: raw binary, XML, JSON, และอื่น ๆ อัล รูปแบบของข้อมูลควรถูกแยกออกจากตัวข้อมูลเช่นเดียวกับรหัสที่ร้องขอการทำให้เป็นอนุกรม เพื่อให้แน่ใจว่าการทำให้เป็นอนุกรมนั้นไม่มีข้อผิดพลาดเท่าที่จะทำได้ I / O มีความเสี่ยงโดยเนื้อแท้ด้วยเหตุผลหลายประการ: การออกแบบของฉันแนะนำวิธีที่ล้มเหลวมากขึ้นหรือไม่? ถ้าเป็นเช่นนั้นฉันจะปรับการออกแบบใหม่เพื่อลดความเสี่ยงเหล่านั้นได้อย่างไร โครงการนี้ใช้ C ++ ไม่ว่าคุณจะรักหรือเกลียดมันเป็นภาษาที่มีวิธีการของตัวเองในการทำสิ่งต่าง ๆ และจุดมุ่งหมายของการออกแบบเพื่อให้ทำงานร่วมกับภาษาไม่ได้กับมัน สุดท้ายโครงการจะสร้างขึ้นบนwxWidgets ในขณะที่ฉันกำลังมองหาวิธีแก้ปัญหาที่เหมาะสมกับกรณีทั่วไปมากขึ้นการใช้งานเฉพาะนี้ควรใช้กับชุดเครื่องมือนั้น สิ่งที่ตามมาคือชุดคลาสที่ง่ายมากที่เขียนใน C ++ ที่แสดงการออกแบบ นี่ไม่ใช่คลาสจริงที่ฉันเขียนบางส่วนจนถึงตอนนี้รหัสนี้แสดงให้เห็นถึงการออกแบบที่ฉันใช้อยู่ ขั้นแรกให้บางตัวอย่าง DAO: #include <iostream> #include <map> #include <memory> #include <string> #include <vector> // One widget …
9 design  c++  c++11 

1
การพัฒนาที่เก็บคีย์ / ค่าที่ย้ายไปยัง C ++ ที่ทันสมัย
ฉันกำลังพัฒนาเซิร์ฟเวอร์ฐานข้อมูลที่คล้ายกับ Cassandra การพัฒนาเริ่มต้นใน C แต่สิ่งต่าง ๆ ก็ซับซ้อนมากโดยไม่ต้องเรียน ขณะนี้ฉันได้ย้ายทุกอย่างใน C ++ 11 แต่ฉันยังคงเรียนรู้ C ++ ที่ทันสมัยและยังมีข้อสงสัยมากมาย ฐานข้อมูลจะทำงานกับคู่ของคีย์ / ค่า ทุกคู่มีข้อมูลเพิ่มเติม - เมื่อถูกสร้างขึ้นด้วยเมื่อมันจะหมดอายุ (0 ถ้าไม่หมดอายุ) แต่ละคู่นั้นไม่เปลี่ยนรูป Key คือสตริง C ค่าเป็นโมฆะ * แต่อย่างน้อยตอนนี้ฉันทำงานด้วยค่าเป็นสตริง C เช่นกัน มีIListระดับนามธรรม มันสืบทอดมาจากสามชั้น VectorList - C dynamic array - คล้ายกับ std :: vector แต่ใช้ realloc LinkList - ทำเพื่อการตรวจสอบและเปรียบเทียบประสิทธิภาพ SkipList …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.