C++ 中 i++與++i的區別

i++++i 這兩個都可以整體看作是對變量i做的運算,只不過運算與返回的次序不同。沒懂不要緊看下面的詳解。

  • i++ : 功能是使i加一,但是返回的是原始(還未加一時)的i
  • ++i:功能是使i加一,返回的是加一後的i

以下有幾個示例:

vector<int> nums = { 3, 4,5, 10,6,7 ,7, 1,1, 5 };
int i = 0;
cout << nums[i++] << endl; // output: 3
cout << nums[++i] << endl;// output: 5
cout << i << endl;// output: 2
int j = i++; 
cout << j << endl;// output: 2
cout << i << endl;// output: 3

上述例子由概念不難理解。重點講下以下幾個例子:

// 接着上面的程序,此時 i=3.
if (i == ++i) {
	cout << "(i == ++i) = true" << endl;
}// output: (i == ++i) = true
cout << i << endl;// output: 8

// 同理有以下:
if (i++ == i++) {
	cout << "(i++ == i++) = true" << endl;
}// output: (i++ == i++) = true
cout << i << endl;// output: 5

if (++i == ++i) {
	cout << "(i++ == ++i) = true" << endl;
}// output: (i++ == ++i) = true
cout << i << endl;// output: 7

咋一看,感覺很奇怪。如果運用以上的說法,感覺(i++ == i++) = true 會說不通,所以引入第二種理解方式,那就是把這些操作都當成運算,比如: i++, ++i, ==, arr[], fun(),既然有運算就會有優先級,他們的優先級是這樣排列的:

在這裏插入圖片描述
所以==優先級是遠遠低於i++,++i 的,所以i++ == i++就可以理解爲(i++)==(i++)
另外建議沒有特殊要求的話儘量用++i來自增,不容易出bug。

參考鏈接:

  • https://stackoverflow.com/questions/24853/c-what-is-the-difference-between-i-and-i
  • https://zh.cppreference.com/w/cpp/language/operator_precedence
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章