2016-01-22 52 views
0

就在今天,我偶然發現了一小段代碼,讓我感到困惑。關於解引用和遞增的混淆

#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個操作員的順序的帖子,每個人都說:「開始」會先遞增,然後解除。但std :: begin()返回一個迭代器到數組的開頭。據說這樣,如果我在提取數組之前先將指針增加到數組的開頭,那麼我的第一個輸出不應該是1嗎? 在此先感謝!

+0

您擁有它的方式是在增量後進行遞增,從而在遞增值之前進行推理。 –

回答

0

*start++使用後增量運算符。隨着遞增遞增,項目遞增,但返回的值是遞增前的值。您正在取消引用該值,因此這就是爲什麼輸出從0開始的原因。

+0

我知道post-increment操作符在「使用」它後遞增了這個值,但是由於操作符優先級,我在這裏感到困惑,因爲它指出任何遞增會在解除引用之前完成。這不是矛盾嗎? – Philipp317

+0

@ Philipp317 Nope。增量首先發生,只是'*'使用來自'start ++'的返回值,而不是'++'發生後的'start'。 – NathanOliver

+0

非常感謝,清除了一些東西。 :) – Philipp317