2010-05-17 29 views

Trả lời

12

Bjarne Stroustrup đề cập trong mình C++0x FAQ về auto:.

"Ý nghĩa cũ của ô tô (" đây là một biến địa phương ") là không cần thiết và không sử dụng Một số thành viên ủy ban trawled qua hàng triệu dòng của mã chỉ tìm kiếm một số ít sử dụng - và hầu hết trong số đó nằm trong các phòng thử nghiệm hoặc có vẻ là lỗi. "

Vì vậy, tôi giả định rằng các trình biên dịch không bị bắt buộc theo tiêu chuẩn để thực hiện ý nghĩa cũ của auto.

42

Điều này sẽ vi phạm nếu mã của bạn chứa từ khóa auto. Trong gần 30 năm lập trình C và C++ tôi chưa bao giờ gặp bất kỳ điều gì đã làm. Từ khóa đã được giới thiệu trong trình biên dịch C đầu tiên để chỉ định các biến chức năng cục bộ, nhưng các trình biên dịch gần như ngay lập tức trở nên đủ thông minh để không yêu cầu nó, và rất ít mã sử dụng nó sẽ tồn tại ngày hôm nay - đó là lý do tại sao C++ 0x chọn tái chế nó hơn là giới thiệu từ khóa mới mà sẽ gây ra sự cố về tính di động.

Mục đích của khóa tự động trong C++ 0X là cho phép trình biên dịch để tìm ra kiểu của một biến, nơi này có thể:

vector <int> v; 
auto it = v.begin(): 

trình biên dịch có thể thấy rằng v.begin () phải trả lại vector<int>::iterator và do đó, có thể tạo biến số thuộc loại đó, tiết kiệm rất nhiều bàn phím hoặc tạo typedef.

+11

Thật tuyệt vời, tôi ghét phải gõ các trình vòng lặp vector;) – identitycrisisuk

+0

Tại sao mã ngắt có chứa 'tự động'? Không phải ý nghĩa cũ vẫn còn hợp lệ sao? – Motti

+0

@mottii Thành thật mà nói, tôi không chắc chắn - một trình biên dịch có thể thấy rằng 'auto int i;' không tự động được sử dụng theo nghĩa mới, nhưng tôi không chắc liệu tiêu chuẩn có yêu cầu họ làm như vậy hay không. –

8

Trong C, auto thời lượng lưu trữ tự động được chỉ định (ngược với static, extern, register). Vì đây là mặc định, tôi chưa bao giờ thấy auto được sử dụng trong bất kỳ mã nào. Tôi đã không làm nhiều C, mặc dù.

2

Nó hiếm khi được sử dụng; nó có nghĩa là một biến cục bộ. Các trình biên dịch hiện đại như VS2010 C++ cung cấp cho nó new meaning.

+3

Ý nghĩa mới này là từ tiêu chuẩn C++ 0x như đã đề cập ở trên – Stewart

4

Câu trả lời này là sai, xem following question, tôi để lại câu trả lời ở đây làm tài liệu tham khảo. sử dụng auto


AFAIK C++ 0x của không mâu thuẫn với C sử dụng truyền thống của auto. Trong C auto được sử dụng cùng với loại.

auto char c1 = 'a'; // OK, old meaning of auto is still valid 
auto c2 = 'b'; // OK, new meaning of auto (deduce c2 is a char) 

Nơi duy nhất mà nó có thể thay đổi ý nghĩa của mã này là khi tự động được sử dụng cùng với ngầm int quy tắc (nếu không gõ được quy định -> nó là một int) trong trường hợp dòng thứ hai mà trong ví dụ của tôi đã từng có c2 loại int và giờ là loại char.

+0

Không biên dịch với g ++, FWIW. –

+0

Cảm ơn @Neil, tôi đã hỏi một câu hỏi mới để tìm ra ai là đúng (Tôi không thể tìm thấy bất cứ điều gì trong bản thảo C++ 0x) – Motti

+1

Tôi ngạc nhiên vì họ không cho phép điều này cho tất cả các mụn cóc khác trong C++ vì lợi ích khả năng tương thích của C. ;) –

Các vấn đề liên quan