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

คำหลัก "อัตโนมัติ" ถูกนำมาใช้ใหม่ใน C ++ 11 สำหรับประเภทที่อนุมาน เมื่อใช้เพื่อแทนที่ชื่อชนิดในการประกาศตัวแปรเริ่มต้นตัวแปรจะได้รับประเภทเดียวกับตัวเริ่มต้น เมื่อใช้เป็นชนิดการส่งคืนประเภทการส่งคืนจะถูกระบุเป็นชนิดผลตอบแทนต่อท้ายหรืออนุมานจากนิพจน์ที่ส่งคืน

1
'auto' เป็นตัวยึดอาร์กิวเมนต์เทมเพลตสำหรับพารามิเตอร์ฟังก์ชัน
C ++ 20 อนุญาตให้ใช้autoสำหรับประเภทพารามิเตอร์ฟังก์ชัน มันยังอนุญาตให้ใช้autoเป็นตัวยึดอาร์กิวเมนต์เทมเพลต (ไม่เหมือนกัน แต่ในจิตวิญญาณของเทมเพลต C ++ 17 <auto>ในทางใดทางหนึ่ง) สำหรับประเภทพารามิเตอร์ฟังก์ชันหรือไม่ ดังนั้นรหัสต่อไปนี้ก่อน C ++ 20: template<typename First, typename Second> void printPair(const std::pair<First, Second>& p) { std::cout << p.first << ", " << p.second; } สามารถเขียนเป็น: void printPair(const std::pair<auto, auto>& p) { std::cout << p.first << ", " << p.second; …
22 c++  templates  auto  c++20 

6
การเริ่มต้นตัวแปรชนิดที่ไม่รู้จักผ่านตัวสร้างที่โอเวอร์โหลดใน C ++
มาจากพื้นหลังหลามส่วนใหญ่ฉันค่อนข้างลำบากกับการทำงานกับประเภทใน C ++ ฉันพยายามที่จะเริ่มต้นตัวแปรระดับผ่านหนึ่งในหลายตัวสร้างมากเกินไปที่ใช้ประเภทที่แตกต่างกันเป็นพารามิเตอร์ ฉันได้อ่านแล้วว่าการใช้autoคำหลักนั้นสามารถใช้สำหรับการประกาศอัตโนมัติของตัวแปรได้อย่างไรก็ตามในกรณีของฉันมันจะไม่ถูกกำหนดค่าเริ่มต้นจนกว่าจะเลือกคอนสตรัคเตอร์ แต่คอมไพเลอร์ไม่ได้มีความสุขเกี่ยวกับการไม่ valueinitialising class Token { public: auto value; Token(int ivalue) { value = ivalue; } Token(float fvalue) { value = fvalue; } Token(std::string svalue) { value = svalue; } void printValue() { std::cout << "The token value is: " << value << std::endl; } }; …

1
std :: pair <auto, auto> return type
ผมเล่นรอบกับในauto std::pairในรหัสด้านล่างฟังก์ชั่นfควรจะส่งกลับstd::pairประเภทซึ่งขึ้นอยู่กับพารามิเตอร์แม่แบบ ตัวอย่างการทำงาน: ตัวอย่าง 1 template &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; // pair of doubles else return std::pair{0.0f, 0.0f}; // pair of floats } ใช้งานได้กับ gcc 9.2, gcc 10.0, …

2
การหักประเภทอัตโนมัติไม่ตรงกันระหว่างคอมไพเลอร์ c ++ ที่ต่างกัน
ดังนั้นฉันกำลังพยายามที่จะใช้ผลิตภัณฑ์ dot ( https://en.wikipedia.org/wiki/Dot_product ) ในบางรสชาติของ C ++ ที่ทันสมัยและมาพร้อมกับรหัสต่อไปนี้: #include &lt;iostream&gt; template&lt;class... Args&gt; auto dot(Args... args) { auto a = [args...](Args...) { return [=](auto... brgs) { static_assert(sizeof...(args) == sizeof...(brgs)); auto v1 = {args...}, i1 = v1.begin(); auto v2 = {brgs...}, i2 = v2.begin(); typename std::common_type&lt;Args...&gt;::type s = 0; while( i1 …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.