在Accelerated C++
Andrew Koenig
之后,他编写了以下代码以介绍模板和通用函数。此代码是否跳过容器中的第一个元素?或者它在递增之前复制第一个迭代器对象:
template<class In, class Out>
Out copy(In begin, In end, Out dest)
{
while (begin != end)
*dest++ = *begin++;
return dest;
}
换句话说,这是否与他的代码一样?:
template<class In, class Out>
Out copy(In begin, In end, Out dest)
{
while (begin != end)
*dest = *begin;
dest++; begin++;
return dest;
}
答案 0 :(得分:1)
增加一个迭代器(或其他任何事情)可能会让人感到困惑,但它正在做的事情非常简单。它复制值,增加原始值,然后返回副本。所以用“* dest ++”引用的位置与“* dest”相同,唯一的区别是在语句完成后,dest现在将引用iteratable中的下一个迭代。
当程序员在同一个表达式中重复使用递增变量时,会出现唯一的问题。 (通常只用作脑筋急转弯,由此产生的效果因语言而异)