2012-08-29 29 views
5

câu hỏi lý thuyết chỉ - tại sao tôi không thể viết mã như:tự động khóa chỉ hành vi kỳ lạ trong C++ 11

auto auto foo = 0; 

từ khóa tự động đầu tiên - lưu trữ lớp specifier (yeah, tôi biết rằng nó vô dụng và bị phản đối trong C++ 11), từ khóa tự động thứ hai - tự động loại-specifier.

Vì vậy, có gì sai?

Và một lần nữa - tôi không thực sự muốn sử dụng mã này trong mã thực.

+0

Hãy xem [dcl.spec.auto] trong tiêu chuẩn C++ 11. * 5: Một chương trình sử dụng tự động trong ngữ cảnh không được cho phép rõ ràng trong phần này là không đúng định dạng. * Không có đề cập đến trước đó về việc sử dụng C++ 03. – chris

+0

Họ thực sự loại bỏ ý nghĩa cũ của 'tự động'. Xem câu hỏi của riêng tôi: http://stackoverflow.com/questions/12093717/why-old-usage-c03-of-auto-does-not-compile-under-c11. Có lẽ không liên quan - nhưng tôi tin rằng điều này là hoàn toàn hợp lệ: 'tĩnh auto a = 7;' – PiotrNycz

Trả lời

19

Số auto trình chỉ định lớp lưu trữ không phải là "vô dụng và không được dùng trong C++ 11", nó đã bị xóa hoàn toàn. Từ khóa auto không còn là bộ định danh lớp lưu trữ và không thể được sử dụng làm từ khóa.

Trong C++ 11, auto là trình chỉ định loại đơn giản.

+0

Ồ, tôi thấy: Thay đổi: Xóa tự động làm bộ lưu trữ lớp lưu trữ – FrozenHeart

+2

Vâng, đó là một thay đổi đột phá, nhưng không quan trọng bởi vì việc sử dụng cũ của 'auto' (như là một bộ lưu trữ lớp lưu trữ) là thừa. –

+0

Cảm ơn bạn rất nhiều! – FrozenHeart

3

Từ Stroustrup's FAQ:

.... Ý nghĩa cũ của ô tô ("đây là một biến cục bộ") bây giờ là bất hợp pháp. Một số thành viên ủy ban đã rà soát qua hàng triệu dòng của mã tìm kiếm chỉ một số ít sử dụng - và hầu hết trong số đó nằm trong các bộ kiểm tra hoặc có vẻ là lỗi.

Điều này cho biết không có nhiều mã được sử dụng bằng cách sử dụng "tự động" làm bộ định danh lưu trữ.