สำหรับตัวแปรระบุว่าประเภทของตัวแปรที่จะประกาศจะถูกหักโดยอัตโนมัติจาก initializer สำหรับฟังก์ชั่นระบุว่าประเภทการคืนสินค้าเป็นประเภทการส่งคืนตามมาหรือจะถูกหักจากคำสั่งการส่งคืน (ตั้งแต่ C ++ 14)
วากยสัมพันธ์
auto variable initializer (1) (since C++11)
auto function -> return type (2) (since C++11)
auto function (3) (since C++14)
decltype(auto) variable initializer (4) (since C++14)
decltype(auto) function (5) (since C++14)
auto :: (6) (concepts TS)
cv(optional) auto ref(optional) parameter (7) (since C++14)
คำอธิบาย
1) เมื่อประกาศตัวแปรในขอบเขตบล็อกในขอบเขตเนมสเปซในคำสั่งการเตรียมใช้งานของ for loops ฯลฯ อาจใช้คำหลักอัตโนมัติเป็นตัวระบุประเภท เมื่อกำหนดชนิดของ initializer แล้วคอมไพเลอร์จะกำหนดประเภทที่จะแทนที่คำหลักอัตโนมัติโดยใช้กฎสำหรับการลดอาร์กิวเมนต์เทมเพลตจากการเรียกใช้ฟังก์ชัน (ดูที่การลดอาร์กิวเมนต์เทมเพลต # บริบทอื่นสำหรับรายละเอียด) คำหลักอัตโนมัติอาจมาพร้อมกับตัวดัดแปลงเช่น const หรือ & ซึ่งจะมีส่วนร่วมในการลดประเภท ตัวอย่างเช่นที่กำหนดconst auto& i = expr;
ประเภทของ i เป็นชนิดของอาร์กิวเมนต์ u ในแม่แบบจินตภาพtemplate<class U> void f(const U& u)
หากการเรียกใช้ฟังก์ชันf(expr)
ถูกรวบรวม ดังนั้น auto && อาจถูกอนุมานได้ว่าเป็นการอ้างอิงแบบ lvalue หรือการอ้างอิงแบบ rvalue ตาม initializer ซึ่งใช้ในช่วงที่ใช้สำหรับลูป หาก auto ถูกใช้เพื่อประกาศตัวแปรหลายชนิดประเภทที่อนุมานต้องตรงกัน ตัวอย่างเช่นการประกาศauto i = 0, d = 0.0;
นั้นมีรูปแบบไม่ดีในขณะที่การประกาศauto i = 0, *p = &i;
นั้นมีรูปแบบที่ถูกต้องและมีการสรุปอัตโนมัติเป็น int
2) ในการประกาศฟังก์ชั่นที่ใช้ไวยากรณ์ประเภทการส่งคืนต่อท้ายคำหลักอัตโนมัติไม่ทำการตรวจสอบประเภทอัตโนมัติ มันทำหน้าที่เป็นส่วนหนึ่งของไวยากรณ์
3) ในการประกาศฟังก์ชั่นที่ไม่ได้ใช้ไวยากรณ์ชนิดการส่งคืนต่อท้ายคีย์เวิร์ด auto ระบุว่าชนิดการส่งคืนจะถูกอนุมานจากตัวถูกดำเนินการของคำสั่งการส่งคืนโดยใช้กฎสำหรับการลดอาร์กิวเมนต์เทมเพลต
4) หากประเภทของตัวแปรที่ประกาศไว้คือ decltype (auto) คีย์เวิร์ด auto จะถูกแทนที่ด้วย expression (หรือรายการ expression) ของ initializer และประเภทที่เกิดขึ้นจริงจะถูกใช้โดยใช้กฎสำหรับ decltype
5) หากประเภทการคืนของฟังก์ชั่นมีการประกาศ decltype (อัตโนมัติ) คำหลักอัตโนมัติจะถูกแทนที่ด้วยตัวถูกดำเนินการของคำสั่งการส่งคืนและประเภทผลตอบแทนที่เกิดขึ้นจริงจะถูกหักโดยใช้กฎสำหรับ decltype
6) ตัวระบุชื่อที่ซ้อนกันของ form auto :: เป็นตัวยึดที่ถูกแทนที่ด้วยคลาสหรือประเภทการแจงนับตามกฎสำหรับการลดตัวยึดประเภทข้อ จำกัด
7) การประกาศพารามิเตอร์ในการแสดงออกแลมบ์ดา (ตั้งแต่ C ++ 14) การประกาศพารามิเตอร์ฟังก์ชัน (แนวคิด TS)
หมายเหตุ
จนถึง C ++ 11 อัตโนมัติมีความหมายของตัวระบุระยะเวลาการจัดเก็บ การผสมตัวแปรและฟังก์ชั่นอัตโนมัติในการประกาศเดียวเนื่องจากauto f() -> int, i = 0;
ไม่ได้รับอนุญาต
สำหรับข้อมูลเพิ่มเติม: http://en.cppreference.com/w/cpp/language/auto