By adrianshum from telnet://ptt.cc 看板 C_and_CPP
i++ 是 做完遞增後, 回傳 遞增 *前* 的值
++i 則是做完遞增後, 回傳遞增 *後* 的值
你不可以在一個運算式(expression)中,對一個基本型態的變數修改其值超過一次以上。否則,將導致未定義的行為(undefined behavior)
錯誤例子:
int i = 7;
int j = ++i + i++;
正確例子:
int i = 7;
int j = ++i;
j += i++;
你也不可以在一個運算式(expression)中,對一個基本型態的變數修改其值,而且還在同一個式子的其他地方為了其他目的而存取該變數的值。(其他目的,是指不是為了計算這個變數的新值的目的)。否則,將導致未定義的行為。
錯誤例子:
x = x++;
錯誤例子:
int arr[5];
int i = 0;
arr[i] = i++;
正確例子:
int arr[5];
int i = 0;
arr[i] = i;
i++;
錯誤例子:
int i = 10;
cout << i << "==" << i++;
正確例子:
int i = 10;
cout << i << "==";
cout << i++;
錯誤例子:
int Integer=10;
printf( "%d %d %d", Integer++, Integer++, Integer++ );
錯誤例子:
void foo(int a, int b) { ... }
int main() {
int i=0;
foo(i++, i++);
}
說明: C/C++ 並沒有強制規定參數會由哪個方向開始處理(不像Java是由左到右),因此可能會造成與預期不符的情況
沒有留言:
張貼留言