我不理解FCD (§7.6.1.2/4)第148页上示例的最后一行:
const int&& foo();
int i;
struct A { double x; };
const A* a = new A();
decltype(foo()) x1 = i; // type is const int&&
decltype(i) x2; // type is int
decltype(a->x) x3; // type is double
decltype((a->x)) x4 = x3; // type is const double&为什么圆括号在这里会有不同?难道不应该像上面的代码行那样简单地使用double吗?
发布于 2010-06-23 07:10:25
就在这个例子上面,它写道
我认为decltype(a->x)是“类成员访问”的一个例子,而decltype((a->x))是一个左值的例子。
发布于 2010-06-23 07:12:13
decltype(a->x)这为您提供了成员变量A::x的类型,即double。
decltype((a->x))这为您提供了表达式(a->x)的类型,它是一个左值表达式(因此它是一个常量引用--a是一个const A*)。
发布于 2010-06-23 07:10:59
添加的括号将其转换为左值。
MSDN says
内圆括号会使语句作为表达式而不是成员访问进行计算。因为a被声明为常量指针,所以该类型是对常量double的引用。
https://stackoverflow.com/questions/3097779
复制相似问题