【发布时间】:2019-06-17 18:14:14
【问题描述】:
cppreference 说:
命名变量、函数、概念的特殊化(C++20 起)或枚举数的标识符可用作表达式。仅由标识符组成的表达式的结果是由标识符命名的实体。 [...] 表达式的类型确定如下:
[...] 否则,表达式的类型与命名实体的类型相同。
这不是错误吗?如果实体是引用,例如:
int &a = ...
那么a作为实体的类型是int &,但是a作为表达式的类型只有int,不是吗?表达式的类型是never a reference:
[...] 每个表达式都有一些非引用类型
额外问题:a 的类型(作为表达式)是 int 还是 int & 有关系吗?如果是,它有什么不同?
注意:decltype 使用相同的措辞:
如果参数是不带括号的 id 表达式或不带括号的类成员访问表达式,则 decltype 产生 由该表达式命名的实体的类型。
但很明显,decltype(a) 是 int &。
【问题讨论】:
标签: c++ language-lawyer