当有人询问decltype(a)
和之间的区别时decltype((a))
,通常的答案是- a
是变量,(a)
是表达式。我觉得这个答案不令人满意。
首先,a
也是一个表达。主表达式的选项包括:
- (表情)
- id表达
更重要的是,decltype的措词非常非常明确地考虑了括号:
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, ...
因此问题仍然存在。为什么括号要区别对待?是否有人熟悉其背后的技术论文或委员会讨论?括号的明确考虑导致认为这不是疏忽,所以一定有我所缺少的技术原因。
(a)
是表达式,并且a
是表达式和变量”。