2013-12-12 15 views
19

Một người bạn hỏi tôi để giải thích tại saoTại sao là const const tuyên bố này const hợp lệ

const const const const const int const i = 0; 

là cú pháp hợp lệ. Tôi từ chối có bất kỳ suy nghĩ về chủ đề này. Mặc dù tôi tò mò nếu nó chỉ là một điều ngữ pháp?

Chỉnh sửa. Thẻ là C++, bạn tôi đã tham khảo gcc, vì vậy tôi có lẽ nên thêm thẻ C.

+4

[. Nó không phải] (http://coliru.stacked-crooked.com/a/77773912987e1506) –

+0

@GuilhermeBernal, đối tượng được gắn thẻ ++ , không phải C. -1 – lucas92

+3

@Konrad. Nó là hợp lệ C nhưng không hợp lệ C++. (không có ý định xóa) –

Trả lời

28

Từ n1256:

6.7.3/4

Nếu cùng quali fi er xuất hiện nhiều lần trong cùng một Speci fi er-quali fi er-list, hoặc trực tiếp hoặc thông qua một hoặc nhiều typedefs, hành vi cũng giống như hành vi chỉ xuất hiện một lần.

Trong C++, điều này sẽ gây ra lỗi.

Từ C++ 03 tiêu chuẩn:

7.1.5/1 [dcl.type]

Theo nguyên tắc chung, ít nhất một loại-specifier được phép vào decl- hoàn specifier-seq của một khai báo. Ngoại lệ duy nhất cho quy tắc này là như sau:

- const hoặc dễ bay hơi có thể được kết hợp với bất kỳ loại thông số kỹ thuật nào khác. Tuy nhiên, cv- qualifiers dự phòng bị cấm ngoại trừ khi được giới thiệu thông qua việc sử dụng typedefs (7.1.3) hoặc đối số kiểu mẫu (14.3), trong trường hợp này các giá trị cv dự phòng bị bỏ qua.

Từ N3797 (C++ 11):

7.1.6/2 [dcl.type]

Theo nguyên tắc chung, ở hầu hết các er fi một kiểu đặc hiệu được phép vào hoàn thành tuyên bố khai báo của một tuyên bố hoặc trong một loại-speci fi er-seq hoặc trailing-type-speci fi er-seq. Ngoại lệ duy nhất cho quy tắc này là sau:

C
— const can be combined with any type specifier except itself. 
+0

Tương tự với '&', tôi tin. 'typedef int & t; typedef t & u;' có nghĩa là 'u' và' t' là cùng loại. (Hãy coi chừng chữ '&& ', đó là C++ 11) –

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