C++ decltype(*int_迭代器+;0)的类型是什么?

C++ decltype(*int_迭代器+;0)的类型是什么?,c++,C++,PS:我试过VS,IDE提示函数foo的返回类型是int 这本书是C++入门第五答案书,但我的不是英文版本,它是由翻译改编的,所以我一开始没提过。 这是int,这正是作者添加+0…的原因,这是一种快速摆脱引用类型并确保foo返回副本的方法(这似乎是它的目的) decltype在类型为T的prvalue表达式上 要么这本书的散文是错的,要么你看错了。@user4581301:但是*它的类型是一个“参考”(或者是std::vector)的包装值。@user4581301我知道begin是一个迭代器。

PS:我试过VS,IDE提示函数
foo
的返回类型是
int

这本书是C++入门第五答案书,但我的不是英文版本,它是由翻译改编的,所以我一开始没提过。
这是
int
,这正是作者添加
+0
…的原因,这是一种快速摆脱引用类型并确保
foo
返回副本的方法(这似乎是它的目的)

decltype
在类型为
T
的prvalue表达式上


要么这本书的散文是错的,要么你看错了。

@user4581301:但是
*它的类型是一个“参考”(或者是
std::vector
)的包装值。@user4581301我知道
begin
是一个迭代器。。我说,
*begin
是一个参考。我很抱歉。我误解了这个问题。你想知道为什么这本书说它应该是
const
?我看不出给出的例子会导致
const int
@user4581301没有问题:D。我想知道为什么书中说它是
const reference
,答案书说它是一个参考。@Rick虽然在这种情况下是正确的,但我要说你不100%依赖这些东西是正确的!当然,如果<代码> FoO 有一些文档注释,解释它的目的,以及如何解释<代码> >代码> <代码> >代码> + 0代码>技巧,那么就不会有任何伤害。“作为一种快速摆脱引用类型的方法”,似乎是一种懒惰的方式,避免使用它仅仅是来自C++入门第五的练习。顺便说一句,答案是迭代器必须支持随机访问(或者更一般地说,
AIterator
必须具有
op+
)@LightnessRacesinOrbit为什么?代码不是在迭代器本身上调用
运算符+
,而是在迭代器的
运算符*
返回的值上调用。由于运算符优先级,
*begin+0
被视为
(*begin)+0
,而不是
*(begin+0)
template <typename AIterator>
auto foo(AIterator begin) -> decltype(*begin + 0){
    return *begin;
}
vector<int> ivec = {1,2,3};
foo(ivec.begin());
int a = 3, &b = a;
decltype(b + 0) d; //d is a int