Các chủ đề đã được thảo luận trước đây , nhưng đây không phải là một bản sao.
Khi ai đó hỏi về sự khác biệt giữa decltype(a)
và decltype((a))
, câu trả lời thông thường là - a
là một biến, (a)
là một biểu thức. Tôi thấy câu trả lời này không thỏa mãn.
Đầu tiên, a
là một biểu hiện là tốt. Các tùy chọn cho một biểu thức chính bao gồm, trong số những thứ khác -
- ( biểu hiện )
- biểu thức id
Quan trọng hơn, cụm từ cho dectype xem xét dấu ngoặc đơn rất, rất rõ ràng :
For an expression e, the type denoted by decltype(e) is defined as follows:
(1.1) if e is an unparenthesized id-expression naming a structured binding, ...
(1.2) otherwise, if e is an unparenthesized id-expression naming a non-type template-parameter, ...
(1.3) otherwise, if e is an unparenthesized id-expression or an unparenthesized class member access, ...
(1.4) otherwise, ...
Vì vậy, câu hỏi vẫn còn. Tại sao dấu ngoặc đơn được xử lý khác nhau? Có ai quen thuộc với các bài viết kỹ thuật hoặc các cuộc thảo luận của ủy ban đằng sau nó? Việc xem xét rõ ràng cho dấu ngoặc đơn dẫn đến việc nghĩ rằng đây không phải là một sự giám sát, do đó phải có một lý do kỹ thuật mà tôi thiếu.
(a)
là một biểu thức, vàa
là một biểu thức và một biến".