Khi tôi sử dụng C++ 11 auto
, các quy tắc loại khấu trừ liên quan đến việc liệu nó sẽ giải quyết thành giá trị hoặc tham chiếu?C++ 11 ngữ nghĩa "tự động"
ví dụ, đôi khi nó là rõ ràng:
auto i = v.begin(); // Copy, begin() returns an iterator by value
Đây là chưa rõ ràng:
const std::shared_ptr<Foo>& get_foo();
auto p = get_foo(); // Copy or reference?
static std::shared_ptr<Foo> s_foo;
auto sp = s_foo; // Copy or reference?
std::vector<std::shared_ptr<Foo>> c;
for (auto foo: c) { // Copy for every loop iteration?
Lưu ý rằng con trỏ '//' không thực sự cần thiết. Ngoài ra, chỉ vì một trình biên dịch cho đầu ra này không có nghĩa là nó phù hợp tiêu chuẩn. ;) Trong trường hợp này nó là chính xác, mặc dù một lời giải thích tốt hơn có thể được đưa ra những gì chính xác xảy ra (loại suy luận là "phân rã"). – Xeo