Subjek telah dibahas sebelumnya , tetapi ini bukan duplikat.
Ketika seseorang bertanya tentang perbedaan antara decltype(a)
dan decltype((a))
, jawaban yang biasa adalah - a
adalah variabel, (a)
adalah ekspresi. Saya menemukan jawaban ini tidak memuaskan.
Pertama, a
adalah ekspresi juga. Pilihan untuk ekspresi primer meliputi, antara lain -
- (ekspresi)
- ekspresi-id
Lebih penting lagi, frasa untuk decltype menganggap kurung sangat, sangat eksplisit :
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, ...
Jadi pertanyaannya tetap. Mengapa kurung diperlakukan berbeda? Adakah yang akrab dengan makalah teknis atau diskusi komite di belakangnya? Pertimbangan eksplisit untuk tanda kurung membuat orang berpikir ini bukan kekhilafan, jadi pasti ada alasan teknis saya tidak ada.
(a)
adalah ekspresi, dana
merupakan ekspresi dan variabel".