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

C ++ 20 เป็นเป้าหมายสำหรับรุ่น C ++ หลัง C ++ 17 ควรใช้แท็กนี้ (พร้อมกับแท็ก C ++) สำหรับคำถามเกี่ยวกับคุณลักษณะของ C ++ ในการติดตามสำหรับ C ++ 20

28
enum เป็นสตริงใน C ++ 11 / C ++ 14 / C ++ 17 ที่ทันสมัยและ C ++ ในอนาคต 20
ตรงกันข้ามกับคำถามที่คล้ายกันทั้งหมดคำถามนี้เกี่ยวกับการใช้คุณสมบัติ C ++ ใหม่ 2008 ค มีวิธีง่าย ๆ ในการแปลง C ++ enum เป็นสายอักขระ? 2008 ค วิธีง่ายๆในการใช้ตัวแปรประเภท enum เป็นสตริงใน C? 2008 C ++ วิธีการแมป c ++ enums กับสตริงได้อย่างง่ายดาย 2008 C ++ ทำบางสิ่งบางอย่างทั้งตัวระบุ C และสตริง? 2008 C ++ มีสคริปต์ง่าย ๆ ในการแปลง C ++ enum เป็นสตริงหรือไม่ 2009 C ++ จะใช้ enums เป็นค่าสถานะใน C …
354 c++  string  enums  c++17  c++20 

2
"ระยะเวลา" คืออะไรและฉันควรใช้เมื่อใด
เมื่อเร็ว ๆ นี้ฉันได้รับคำแนะนำให้ใช้span<T>ในโค้ดของฉันหรือเคยเห็นคำตอบบางอย่างในเว็บไซต์ซึ่งใช้spanคอนเทนเนอร์บางชนิด แต่ - ฉันไม่พบอะไรอย่างนั้นในไลบรารีมาตรฐาน C ++ 17 ดังนั้นสิ่งนี้ลึกลับspan<T>และทำไม (หรือเมื่อ) มันเป็นความคิดที่ดีที่จะใช้มันถ้ามันไม่ได้มาตรฐาน?

3
ตัวดำเนินการ <=> ใน C ++ คืออะไร
ขณะที่ผมกำลังพยายามที่จะเรียนรู้เกี่ยวกับภาษา C ++ผู้ประกอบการที่ฉัน stumbled เมื่อดำเนินการเปรียบเทียบที่ผิดปกติในcppreference.com , *ในตารางที่มองเช่นนี้: "เอาล่ะถ้านี่เป็นโอเปอเรเตอร์ทั่วไปใน C ++ ฉันควรจะเรียนรู้" แต่ความพยายามทั้งหมดของฉันที่จะอธิบายความลึกลับนี้ไม่ประสบความสำเร็จ แม้แต่ที่นี่ใน Stack Overflow ฉันไม่มีโชคในการค้นหาของฉัน มีการเชื่อมต่อระหว่าง&lt;=&gt;และC ++หรือไม่ และถ้ามีตัวดำเนินการนี้ทำอะไรกันแน่ * ในระหว่างนี้ cppreference.com ได้อัพเดตหน้านั้นและตอนนี้มีข้อมูลเกี่ยวกับ&lt;=&gt;ผู้ให้บริการ

5
ทำไมเราต้องมีความต้องการ?
หนึ่งในมุมของ C ++ 20 requires requiresแนวคิดก็คือว่ามีบางสถานการณ์ที่คุณต้องเขียน ตัวอย่างเช่นตัวอย่างนี้จาก[expr.prim.req] / 3 : ต้องแสดงออกนอกจากนี้ยังสามารถนำมาใช้ในต้องมีข้อ ([ชั่วคราว]) เป็นวิธีการเขียนโฆษณา จำกัด เฉพาะกิจข้อโต้แย้งแม่แบบดังกล่าวเป็นหนึ่งด้านล่าง: template&lt;typename T&gt; requires requires (T x) { x + x; } T add(T a, T b) { return a + b; } เป็นครั้งแรกที่ต้องเปิดต้องใช้ข้อและแนะนำที่สองต้องแสดงออก เหตุผลทางเทคนิคที่อยู่เบื้องหลังrequiresคำหลักที่ต้องการนั้นคืออะไร ทำไมเราไม่อนุญาตให้เขียน: template&lt;typename T&gt; requires (T x) { x + x; } …
161 c++  c++-concepts  c++20 

2
ซอร์สโค้ดมอบอำนาจ C ++ 20 ถูกเก็บไว้ในไฟล์หรือไม่
คำถามแปลก ๆ เล็กน้อยคือถ้าฉันจำไม่ผิดซอร์สโค้ด C ++ ไม่ต้องการระบบไฟล์ในการจัดเก็บไฟล์ การมีคอมไพเลอร์ที่สแกนเอกสารที่เขียนด้วยลายมือผ่านกล้องจะเป็นการใช้งานที่สอดคล้องกัน แม้ว่าในทางปฏิบัติจะไม่สมเหตุสมผลมากนัก อย่างไรก็ตาม C ++ 20 ตอนนี้เพิ่มตำแหน่งต้นทางด้วยfile_name. ตอนนี้หมายความว่าซอร์สโค้ดควรเก็บไว้ในไฟล์หรือไม่


3
Coroutines ใน C ++ 20 คืออะไร?
Coroutines คืออะไรใน c ++ 20เหรอ? แตกต่างจาก "Parallelism2" หรือ / และ "Concurrency2" อย่างไร (ดูภาพด้านล่าง) ภาพด้านล่างมาจาก ISOCPP https://isocpp.org/files/img/wg21-timeline-2017-03.png
104 c++  coroutine  c++20 

2
เหตุใด std :: ssize () จึงถูกนำมาใช้ใน C ++ 20
C ++ 20แนะนำstd::ssize()ฟังก์ชันฟรีดังต่อไปนี้: template &lt;class C&gt; constexpr auto ssize(const C&amp; c) -&gt; std::common_type_t&lt;std::ptrdiff_t, std::make_signed_t&lt;decltype(c.size())&gt;&gt;; ดูเหมือนการใช้งานที่เป็นไปได้จะใช้static_castเพื่อแปลงค่าส่งคืนของsize()ฟังก์ชันสมาชิกของ cl ass Cเป็นคู่ที่ลงนาม เนื่องจากsize()ฟังก์ชันสมาชิกของ C จะส่งกลับค่าที่ไม่ใช่ค่าลบเสมอเหตุใดใคร ๆ จึงต้องการเก็บไว้ในตัวแปรที่ลงชื่อ static_castในกรณีที่ต้องการจริงๆมันเป็นเรื่องของความเรียบง่าย เหตุใดจึงถูกstd::ssize()นำมาใช้ใน C ++ 20
101 c++  stl  unsigned  signed  c++20 

4
ความต้องการของเทมเพลตแลมด้าที่นำมาใช้ใน C ++ 20 คืออะไรเมื่อ C ++ 14 มีแลมด้าทั่วไปอยู่แล้ว
c ++ 14 แนะนำ lambdas ทั่วไปที่ทำให้สามารถเขียนต่อไปนี้: auto func = [](auto a, auto b){ return a + b; }; auto Foo = func(2, 5); auto Bar = func("hello", "world"); เป็นที่ชัดเจนมากว่าแลมบ์ดาทั่วไปนี้funcทำงานได้เหมือนกับฟังก์ชันเทมเพลตfuncจะทำงานได้ เหตุใดคณะกรรมการ C ++ จึงตัดสินใจเพิ่มไวยากรณ์เทมเพลตสำหรับ Lamda ทั่วไป

2
กำลังใช้ malloc สำหรับพฤติกรรมที่ไม่ได้กำหนดไว้จนถึง C ++ 20
ฉันได้รับแจ้งว่ารหัสต่อไปนี้มีพฤติกรรมที่ไม่ได้กำหนดไว้จนถึง C ++ 20: int *p = (int*)malloc(sizeof(int)); *p = 10; เป็นเช่นนั้นจริงหรือ? อาร์กิวเมนต์คืออายุการใช้งานของintอ็อบเจ็กต์ไม่ได้เริ่มต้นก่อนกำหนดค่าให้กับมัน ( P0593R6 ) ในการแก้ไขปัญหาnewควรใช้ตำแหน่ง: int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; เราต้องเรียกตัวสร้างเริ่มต้นที่ไม่สำคัญเพื่อเริ่มอายุการใช้งานของวัตถุหรือไม่? ในเวลาเดียวกันรหัสไม่มีพฤติกรรมที่ไม่ได้กำหนดใน C บริสุทธิ์ แต่จะเป็นอย่างไรถ้าฉันจัดสรรintรหัสใน C และใช้ในรหัส C ++? // C source code: int *alloc_int(void) { int *p = (int*)malloc(sizeof(int)); *p = 10; …

3
ตัวดำเนินการความเท่าเทียมกันไม่ได้ถูกกำหนดไว้สำหรับการใช้งานยานอวกาศที่กำหนดเองใน C ++ 20
ฉันพบพฤติกรรมแปลก ๆ กับผู้ประกอบการยานอวกาศใหม่&lt;=&gt;ใน C ++ 20 ฉันใช้ Visual Studio 2019 /std:c++latestกับคอมไพเลอร์ รหัสนี้คอมไพล์ได้ดีตามที่คาดไว้: #include &lt;compare&gt; struct X { int Dummy = 0; auto operator&lt;=&gt;(const X&amp;) const = default; // Default implementation }; int main() { X a, b; a == b; // OK! return 0; } อย่างไรก็ตามหากฉันเปลี่ยนXเป็นสิ่งนี้: struct X { int …

2
ทำไมโอเปอเรเตอร์! = ถูกลบใน C ++ 20 สำหรับไลบรารีมาตรฐานหลายประเภท?
อ้างอิงจากcppreference , std::type_info::operator!=ถูกลบด้วย C ++ 20, แต่std::type_info::operator==ดูเหมือนว่ายังคงอยู่ อะไรคือเหตุผลเบื้องหลัง ฉันอาจเห็นด้วยว่าการเปรียบเทียบความไม่เท่าเทียมนั้นไร้ความหมาย แต่จากนั้นการเปรียบเทียบความเท่าเทียมจะไม่มีความหมายเช่นกันใช่ไหม ในทำนองเดียวกันoperator!=ชนิดไลบรารีมาตรฐานอื่น ๆ อีกมากมายรวมถึงคอนเทนเนอร์เช่นstd::unordered_map::operator!=และstd::unordered_set::operator!=จะถูกลบใน C ++ 20 ตาม cppreference ต้องเขียนif(!(id1 == id2))ไม่ทำให้รหัสใด ๆ ที่ชัดเจนเมื่อเทียบกับif(id1 != id2)ในทางตรงกันข้าม ...


2
initializers ที่กำหนดใน C ++ 20
ฉันมีคำถามเกี่ยวกับหนึ่งในคุณสมบัติ c ++ 20 ซึ่งเป็น initializers ที่กำหนด (ข้อมูลเพิ่มเติมเกี่ยวกับคุณลักษณะนี้ที่นี่ ) #include &lt;iostream&gt; constexpr unsigned DEFAULT_SALARY {10000}; struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { std::cout &lt;&lt; std::boolalpha &lt;&lt; std::is_aggregate_v&lt;Person&gt; &lt;&lt; '\n'; // true is printed std::cout &lt;&lt; std::boolalpha …

2
ความหมายแบบอินไลน์ในโมดูลอินเตอร์เฟส
พิจารณาไฟล์ส่วนหัว: class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; หรืออีกทางหนึ่ง: class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; inline T::T(int const ID_) noexcept …

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