2015-07-15 28 views
14

Tôi đang gặp sự cố khi hiểu rõ chính xác số id-expression là gì. Tôi sẽ bắt đầu bằng cách làm theo những gì tôi tìm thấy trong bản dự thảo mới nhất của chuẩn C++ bắt đầu với:Biểu thức id chính xác là gì?

enter image description here

Mạo hiểm với định nghĩa của một identifier:

Một định danh là một chuỗi các chữ cái và chữ số tùy ý.

Vì vậy, nó có vẻ như bất kỳ chuỗi dài tùy ý của các chữ cái và chữ số có thể là một id-expression, nhưng chờ đợi:

enter image description here

Vì vậy, các identifier phải được khai báo đầu tiên để cho nó trở thành một id-expression ? Cũng cho phép đầu trên quy định tại khoản 7:

enter image description here

Tiếp tục ...

enter image description here

Tiếp tục một lần nữa ...

enter image description here

Chúng tôi đến đây:

enter image description here

Tôi hiểu điều này có nghĩa là số id-expression yêu cầu một số identifier để khai báo yêu cầu số id-expression. Điều này có vẻ giống như một định nghĩa vòng tròn. Ai đó có thể cho tôi biết nơi tôi đã đi sai?

Dù sao, cách giải thích của tôi là số nhận dạng phải được khai báo đầu tiên để nó được coi là id-expression, nhưng đó không thực sự chỉ là một name? Tiêu chuẩn quy định rằng:

Mọi tên biểu thị thực thể được giới thiệu bởi một tuyên bố.

Vậy tại sao không chỉ gọi nó là name-expression?

+0

Có những tên không phải là số nhận dạng. –

Trả lời

-2

Để trả lời câu tiêu đề của bạn:

Một id-biểu hoặc là một không đủ tiêu chuẩn-id hoặc một có trình độ-id. Nghiêm túc.

Để trả lời các bài diển văn liên quan trong bài viết cơ thể của bạn:

Ai quan tâm những gì nó được gọi là? "Tên" có vẻ khá mơ hồ, dù sao đi nữa. Grammars cố ý không mơ hồ.Các sản phẩm cũng có xu hướng được đặt tên theo các sản phẩm của chúng trực tiếp đóng gói, không chú ý đến những gì có thể được đóng gói đệ quy. Nếu không, nó sẽ là một mớ hỗn độn kinh khủng phức tạp với những cái tên chẳng có ý nghĩa gì trong cái nhìn đầu tiên.

+1

Câu hỏi này là nhiều hơn về việc liệu một * nhận dạng * cần phải có được (phù hợp) tuyên bố là một * biểu thức id *, AFAICS. – Columbo

+1

@Columbo: Sau đó, câu hỏi thực sự nên nói như vậy, thay vì hỏi một cái gì đó khác. –

+0

Nhưng nó, phải không? – Columbo

1

Bạn đang hiểu sai [expr.prim.general]/8:

Một định danh là một id-biểu miễn là nó đã được công bố phù hợp (khoản 7).

Mục đích của cụm từ là không cho phép sử dụng số nhận dạng không khai báo trong biểu thức. I E. đoạn này nói về id-expression s xảy ra là biểu thức chính s, không phải id-expression s xảy ra trong người khai báo. Tôi đồng ý rằng cụm từ này là gây hiểu lầm và phải được khắc phục. Tôi đã gửi một vấn đề cốt lõi.

Vậy tại sao không chỉ gọi nó là biểu tượng tên ?

Lý do lịch sử; sự khác biệt tinh tế giữa các số nhận dạng và tên được tạo sau các cấu trúc ngữ pháp rất cơ bản (id-expression, unqualified-id, v.v.) được đặt tên, và từ đó trở đi, đổi tên chúng không phải là một tùy chọn.

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