Mục tiêu của từ khóa "tự động" trong C là gì? Với C++ 0x nó có ý nghĩa mới nhưng nó có nghĩa là mã của tôi sẽ phá vỡ nếu tôi mã C mã trên một trình biên dịch C++ 0x?Mục tiêu của từ khóa "tự động" của C
Trả lời
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
.
Đ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.
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ù.
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.
Ý nghĩa mới này là từ tiêu chuẩn C++ 0x như đã đề cập ở trên – Stewart
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
.
Không biên dịch với g ++, FWIW. –
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
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. ;) –
- 1. Mục đích của từ khóa 'này' trong C#
- 2. Đếm tham chiếu tự động mục tiêu-C (ARC) và Quan sát giá trị khóa
- 3. Tự động tải lớp trong mục tiêu-C?
- 4. Có bất kỳ song song nào trong từ khóa lợi nhuận của Mục tiêu-C đến C#
- 5. Tự động tạo tệp C++ từ tiêu đề?
- 6. tương lai của mục tiêu c?
- 7. Bản dịch số lớn của C# thành Mục tiêu C
- 8. C: Hành vi của từ khóa `const`
- 9. Tự động khóa/mở khóa bằng cách sử dụng phạm vi trong C++ (từ nền C#)
- 10. Từ khóa tự động C được sử dụng ở đâu?
- 11. Tự động viết lại từ khóa tự động C++ 11 thành các kiểu có nguồn gốc
- 12. Sự khác biệt giữa _ và tự. trong Mục tiêu-C
- 13. [tự tự] có nghĩa là gì trong mục tiêu c?
- 14. Mục tiêu C tương đương với ArrayList của Java
- 15. Tạo mã tự động cho mục tiêu C đến cầu C++
- 16. Phiên bản mục tiêu C của phát nổ()?
- 17. mục tiêu-c sắp xếp NSMutableSet của NSStrings?
- 18. Gọi Python từ mục tiêu-C
- 19. Từ khóa mặc định của C# tương đương trong C++?
- 20. C++/CLI tương đương với từ khóa 'readonly' của C#
- 21. Xóa một thư mục và các thư mục con của nó trong Mục tiêu-C/C
- 22. Phát hành mục tiêu-C của người độc thân
- 23. Gọi chức năng C Mục tiêu từ Mã C++
- 24. Ưu điểm và nhược điểm của từ khóa 'động' 4.0?
- 25. Biểu tượng "quyền lực của" trong mục tiêu-c
- 26. Tương đương mục tiêu C của MessageDigest trong Java?
- 27. Nhập động, Mục tiêu-C, hoạt động như thế nào?
- 28. Mục tiêu-C: ghi đè bộ thu động động
- 29. Sự khác biệt b/w Mục tiêu C của bản thân và C++ của điều này?
- 30. Mục tiêu-C - bộ khởi tạo đơn động động?
Thật tuyệt vời, tôi ghét phải gõ các trình vòng lặp vector;) – identitycrisisuk
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
@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. –