Tôi đã xem several assertions rằng C89 và C++ 03 xác định các quy tắc bí danh nghiêm ngặt. Tôi, tuy nhiên, không thể tìm thấy bit cụ thể trong tiêu chuẩn. Sự hiểu biết của tôi là các quy tắc bí danh nghiêm ngặt đã được thêm vào C99.Có phải C89 hoặc C++ 03 định nghĩa các quy tắc bí danh nghiêm ngặt không?
Trả lời
C++ 03 có sau đây theo §3.10 [basic.lval] p15
:
Nếu một chương trình cố gắng truy cập vào các giá trị được lưu trữ của một đối tượng thông qua một vế trái của khác hơn là một trong các loại sau đây hành vi là undefined 48):
- loại năng động của đối tượng,
- một phiên bản cv-đủ của các loại động của đối tượng,
- một kiểu đó là ký kết hoặc kiểu unsigned tương ứng với các loại động của đối tượng ,
- loại là loại đã ký hoặc chưa ký tương ứng với phiên bản cv đủ điều kiện của loại động của đối tượng,
- loại tổng hợp hoặc liên kết bao gồm một trong các loại nói trên trong số các thành viên của nó (bao gồm, đệ quy, một thành viên của tổ hợp công đoàn hoặc tổ hợp),
- loại là loại cơ sở (có thể cv đủ điều kiện) của loại động của đối tượng,
- loại char hoặc unsigned char.
Footnote:
48) Mục đích của danh sách này là để xác định những trường hợp trong đó một đối tượng có thể có hoặc không có bí danh.
This site cũng liệt kê các phần theo các tiêu chuẩn khác.
Kiểm tra điều này vì tôi đã chọn một cách rõ ràng câu trả lời của bạn trong câu hỏi. –
Văn bản này hiện diện trong C89, §3.3 BÀY:
Một đối tượng có trách nhiệm đã được lưu trữ giá trị của nó được truy cập chỉ bằng một giá trị trái mà có một trong các loại sau đây:
loại được khai báo của đối tượng,
phiên bản đủ điều kiện của loại được tuyên bố loại đối tượng,
một loại đó là ký kết hoặc loại unsigned tương ứng với
kiểu được khai báo của đối tượng,một loại đó là ký kết hoặc loại unsigned tương ứng với một phiên bản
đủ của tuyên bố loại của đối tượng,một loại tổng hợp hoặc công đoàn mà bao gồm một trong những đề cập ở trên
loại giữa các thành viên của nó (bao gồm, đệ quy, thành viên của một subaggregate
hoặc công đoàn chứa), hoặcmột loại nhân vật.
Vi phạm của một "trách nhiệm" hạn chế dẫn đến hành vi không xác định, do đó, một bộ quy tắc răng cưa cho phép có thể được bắt nguồn từ văn bản này.
3.3 trong C89, 3.10/15 trong C++ 03.
Cả hai đều có chú thích, từ ngữ có hiệu lực, "mục đích của danh sách này là để cho biết khi nào một đối tượng có thể hoặc không thể được đặt bí danh".
chuẩnstupid ctrl-f! (Tôi đã tìm kiếm từ "bí danh"! Trung thực!) –
- 1. Một diễn viên đang vi phạm quy tắc bí danh nghiêm ngặt
- 2. Bật cảnh báo bí danh nghiêm ngặt trong g + +
- 3. C/C++ bí danh nghiêm ngặt, đối tượng tồn tại và các trình biên dịch hiện đại
- 4. Định nghĩa nghiêm ngặt để đọc/ghi tệp CSV
- 5. Có quy tắc nghiêm ngặt nào để chuyển đổi JSON sang XML và ngược lại không?
- 6. Bí danh và tiêu chuẩn nghiêm ngặt :: mảng vs mảng kiểu C
- 7. Nghiêm ngặt hoặc Chuyển tiếp?
- 8. dereferencing con trỏ không phá vỡ quy tắc anti-aliasing nghiêm ngặt sử dụng socket Berkeley
- 9. C++ liên kết - nghiêm ngặt và yếu
- 10. Tùy chọn GCC cho mã C nghiêm ngặt nhất?
- 11. FILTER_VALIDATE_URL có quá nghiêm ngặt không?
- 12. Khắc phục cho con trỏ loại bỏ cuộc hội nghị dereferencing sẽ phá vỡ bí danh nghiêm ngặt
- 13. Các mảng Haskell quá nghiêm ngặt?
- 14. Haskell: Các hoạt động boolean không nghiêm ngặt
- 15. Các quy tắc khác nhau trong C#
- 16. Quy tắc Engine trong C hoặc Python
- 17. xHTML 1.0 nghiêm ngặt - Xác thực iFrames
- 18. không gian tên ẩn danh và quy tắc một định nghĩa
- 19. Có phải sửa đổi các chuỗi ký tự không xác định theo tiêu chuẩn C89 không?
- 20. MonadFix bằng ngôn ngữ nghiêm ngặt
- 21. Câu hỏi định nghĩa quy tắc lặp lại (RFC2445)
- 22. quy tắc C răng cưa và memcpy
- 23. Quy tắc phân tích tĩnh C++ này có ý nghĩa như thế nào không?
- 24. Quy tắc ngang: Quyết định thiết kế tốt hoặc kém
- 25. Thành ngữ cho typedef nghiêm ngặt trong C++
- 26. HTML5 DOCTYPE với nghiêm ngặt
- 27. Khi nào char * an toàn cho việc đánh dấu con trỏ nghiêm ngặt?
- 28. Semi-ruột trong định nghĩa quy tắc Makefile
- 29. Dấu/lề bí ẩn xuất hiện sau khi hình ảnh ở chế độ nghiêm ngặt
- 30. C++: Nghiêm ngặt răng cưa và lạm dụng công đoàn
Tôi trích dẫn toàn bộ C++ 03 3.10/15, liệt kê các hình thức bí danh hợp lệ, [trong câu trả lời cho câu hỏi khác] (http://stackoverflow.com/questions/4807643/container-covariance-in -c/4807726 # 4807726). –