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

时间:2018-11-06 20:40:58

标签: c++ dereference decltype

如果我有这样的东西:

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)here中,但是我仍然对 xvalue prvalue 感到困惑。

编辑:在使我感到困惑的原始代码中,我一定有等同于

的内容
const int a = 5;
auto* p = &a;
decltype(*p) b = 1;

并且没有意识到aconst,所以decltype(*p)const int&,这就是第三行很好的原因。

1 个答案:

答案 0 :(得分:2)

*p*it都给您一个int&,这是对int的简单引用。由于您拥有左值decltype(lvalue)会给您T&

这意味着在两个代码块中b都是int&,并且由于无法将prvalue(在这种情况下为1)绑定到非常量左值引用,因此代码无法编译< / p>