如果我有这样的东西:
int a = 5;
auto* p = &a;
decltype(*p) b = 1;
我猜想decltype(*p)
是int
而不是int&
或const int&
。
但是,取消对迭代器(例如(的引用呢
std::vector<int> a { 5 };
auto it = a.begin();
decltype(*it) b = 1;
decltype(*it)
是int
吗?但是*it
的类型不是int&
吗?
我怀疑答案包含在这里的第(4(项中,但我仍然对xvalue和 prvalue编辑:在让我困惑的原始代码中,我一定有类似的东西 没有意识到const int a = 5;
auto* p = &a;
decltype(*p) b = 1;
a
是const
,所以decltype(*p)
是const int&
,这就是为什么第三行很好。
*p
和*it
都会给您一个int&
,它是对int
的lvaue引用。既然你有一个左值,decltype(lvalue)
就会给你一个T&
。
这意味着在两个代码块中,b
都是int&
,代码不会编译,因为您无法将prvalue(在本例中为1
(绑定到非常量左值引用