就在今天,我偶然发现了一段让我感到困惑的简短代码。
#include <iostream>
#include <iterator>
int main()
{
int array[] = {0,1,2,3,4,5,6,7,8,9};
auto start = std::begin(array);
while (start != std::end(array))
std::cout << *start++ << std::endl;
}
这里令我困惑的是0是第一个输出。我阅读了很多关于2个操作员的顺序的帖子,每个人都说:“start”会先递增,然后取消引用。但是std :: begin()将迭代器返回到数组的开头。有了这个说法,如果我在解除引用它之前首先将指针递增到数组的开头,那么我的第一个输出不应该是1吗? 提前致谢!
答案 0 :(得分:0)
*start++
使用后增量运算符。使用后增量,项目会递增,但返回的值是递增前的值。您正在取消引用该值,这就是输出从0开始的原因。