关于解除引用和增量的困惑

时间:2016-01-22 14:06:28

标签: c++ pointers iterator operators

就在今天,我偶然发现了一段让我感到困惑的简短代码。

#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吗? 提前致谢!

1 个答案:

答案 0 :(得分:0)

*start++使用后增量运算符。使用后增量,项目会递增,但返回的值是递增前的值。您正在取消引用该值,这就是输出从0开始的原因。