取消围栏的指针或迭代器的类型是什么



如果我有这样的东西:

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;

没有意识到aconst,所以decltype(*p)const int&,这就是为什么第三行很好。

*p*it都会给您一个int&,它是对int的lvaue引用。既然你有一个左值,decltype(lvalue)就会给你一个T&

这意味着在两个代码块中,b都是int&,代码不会编译,因为您无法将prvalue(在本例中为1(绑定到非常量左值引用

最新更新