首页 > 解决方案 > 解除引用的指针或迭代器的类型是什么?

问题描述

如果我有这样的事情:

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) 项中但我仍然对xvalueprvalue感到困惑。

编辑:在让我感到困惑的原始代码中,我一定有相当于

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

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

标签: c++dereferencedecltype

解决方案


两者都给你一个*p,它是一个对 的 lvaue 引用。因为你有一个左值给你一个.*itint&intdecltype(lvalue)T&

这意味着在两个代码块b中都是一个int&并且代码不会编译,因为您不能将prvalue(1在这种情况下)绑定到非常量左值引用


推荐阅读