2012-12-06 42 views
5

Tôi đang nghiên cứu tiêu chuẩn C++ để hiểu thứ tự các hoạt động, biểu thức, câu lệnh và tác dụng phụ.Cách diễn giải "điểm tuyên bố" cho "const int i = 2; {int i [i];}" - ví dụ từ tiêu chuẩn C++?

Sự cố liên quan là "điểm tuyên bố" cho tên. Trong phần §3.3.2.1 của chuẩn C++ 11, các quốc gia tiêu chuẩn:

Điểm kê khai cho một tên là ngay sau khi hoàn thành declarator của nó (khoản 8) và trước khi khởi tạo của nó (nếu có) ...

đoạn sau đây cho biết thêm một lưu ý với một ví dụ:

Lưu ý: một tên từ một phạm vi bên ngoài vẫn có thể nhìn thấy lên đến mức khai của tên mà giấu nó.

... với ví dụ

const int i = 2; 
{ int i[i]; } 

và các quốc gia bình luận rằng mẫu mã này "khai báo một mảng khối phạm vi của hai số nguyên."

Tôi muốn có thể xem mã mẫu và bằng cách áp dụng định nghĩa "điểm tuyên bố" cùng với ghi chú về khả năng hiển thị tên từ phạm vi bên ngoài, có thể xem mã đó và đi đến kết luận hợp lý, bản thân mình, rằng nó là mã được hình thành tốt mà làm những gì nó xuất hiện để làm.

Tuy nhiên, tôi không thể hiểu cách xem mã này và đi đến kết luận này, dựa trên các định nghĩa và quy tắc này.

Đọc từ trái sang phải, việc khai báo của mảng i[] dường như xuất hiện trước việc sử dụng i từ phạm vi bên ngoài, vì vậy ý ​​nghĩa của "vẫn có thể nhìn thấy lên đến mức tuyên bố" không có nghĩa là trong một cảm giác đọc từ trái sang phải.

"Đến thời điểm khai báo" phải có nghĩa là điều gì đó dọc theo dòng của ý nghĩa "thứ tự hoạt động".

Định nghĩa hoặc quy tắc nào trong tiêu chuẩn C++ quy định rằng trong khai báo mảng, "điểm khai báo" của tên mảng xảy ra "sau" biểu thức bên trong dấu ngoặc vuông? Những gì chính xác là có nghĩa là "sau" trong trường hợp này?

Trả lời

11

"trình khai báo đầy đủ" -> Người khai báo bao gồm [] và nội dung của họ. Nghĩa là, người khai báo đầy đủ ở trên là i[i], vì vậy nó chỉ được khai báo sau đó.

+0

Trình khai báo đầy đủ chỉ là 'i [i]', hay là 'int i [i]'? –

+0

@DanNissenbaum Tôi tin rằng loại này là một phần của người khai báo. –

+0

@DanNissenbaum có 'i [i]' trông giống như một tuyên bố? – mfontanini

1

Điểm khai báo là ngay sau hoàn thành người khai báo. Do đó, bên ngoài i chưa được ẩn bên trong trình khai báo chính nó.

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