2011-06-29 26 views
5

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?

+1

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). –

Trả lời

5

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.

+0

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. –

5

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ặc

  • mộ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.

5

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ẩn
+0

stupid ctrl-f! (Tôi đã tìm kiếm từ "bí danh"! Trung thực!) –

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