Đối với các biến, chỉ định rằng loại biến đang được khai báo sẽ được tự động suy ra từ trình khởi tạo của nó. Đối với các hàm, chỉ định rằng kiểu trả về là kiểu trả về theo sau hoặc sẽ được suy ra từ các câu lệnh trả về của nó (kể từ C ++ 14).
Cú pháp
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)
Giải trình
1) Khi khai báo các biến trong phạm vi khối, trong phạm vi không gian tên, trong các câu lệnh khởi tạo cho các vòng lặp, v.v., từ khóa tự động có thể được sử dụng làm công cụ xác định kiểu. Khi loại trình khởi tạo đã được xác định, trình biên dịch sẽ xác định loại sẽ thay thế từ khóa tự động bằng cách sử dụng các quy tắc để khấu trừ đối số mẫu từ một lệnh gọi hàm (xem khấu trừ đối số mẫu # Các bối cảnh khác để biết chi tiết). Tự động từ khóa có thể được kèm theo các sửa đổi, chẳng hạn như const hoặc &, sẽ tham gia vào loại trừ. Ví dụ, đã cho const auto& i = expr;
, loại i chính xác là loại đối số u trong một mẫu tưởng tượng template<class U> void f(const U& u)
nếu hàm gọif(expr)
đã được biên soạn. Do đó, auto && có thể được suy ra dưới dạng tham chiếu giá trị hoặc tham chiếu giá trị theo trình khởi tạo, được sử dụng trong vòng lặp dựa trên phạm vi. Nếu tự động được sử dụng để khai báo nhiều biến, các loại suy ra phải khớp. Ví dụ, khai báo auto i = 0, d = 0.0;
không đúng định dạng, trong khi khai báo auto i = 0, *p = &i;
được định dạng tốt và tự động được suy ra là int.
2) Trong một khai báo hàm sử dụng cú pháp kiểu trả về theo sau, từ khóa tự động không thực hiện phát hiện loại tự động. Nó chỉ phục vụ như là một phần của cú pháp.
3) Trong một khai báo hàm không sử dụng cú pháp kiểu trả về theo sau, từ khóa tự động chỉ ra rằng kiểu trả về sẽ được suy ra từ toán hạng của câu lệnh trả về của nó bằng cách sử dụng các quy tắc để khấu trừ đối số khuôn mẫu.
4) Nếu loại khai báo của biến là dectype (auto), từ khóa auto được thay thế bằng biểu thức (hoặc danh sách biểu thức) của bộ khởi tạo và loại thực tế được suy luận bằng cách sử dụng quy tắc cho dectype.
5) Nếu loại trả về của hàm được khai báo là dectype (auto), từ khóa auto được thay thế bằng toán hạng của câu lệnh return và loại trả về thực tế được suy luận bằng cách sử dụng các quy tắc cho dectype.
6) Trình xác định tên lồng nhau của biểu mẫu tự động :: là một trình giữ chỗ được thay thế bằng một loại hoặc kiểu liệt kê theo các quy tắc để khấu trừ giữ chỗ loại bị ràng buộc.
7) Một khai báo tham số trong biểu thức lambda. (kể từ C ++ 14) Một khai báo tham số hàm. (khái niệm TS)
Ghi chú
Cho đến C ++ 11, auto có ngữ nghĩa của bộ xác định thời lượng lưu trữ. Trộn các biến và hàm tự động trong một khai báo, như trong auto f() -> int, i = 0;
không được phép.
Để biết thêm thông tin: http://en.cppreference.com/w/cpp/lingu/auto