LinkedIn にシェア
LINEで送る
Pocket

覚書です。

 

i++と++i、みなさんどっち使ってますか?

あまり意識してないと思いますが、この二つにはしっかりと違いがあります。

++iはプレフィックス形式、i++はポストフィックス形式です。

どんな違いか、コードをみてみましょう

JavaScript :

let i = 0;

console.log(i);   // 0
console.log(++i); // 1
console.log(i);   // 1


i = 0;
console.log(i);   // 0
console.log(i++); // 0
console.log(i);   // 1

 

C/C++ :

#include <stdio.h>

int main(){
    int i = 0;

    printf("i = %d\n", i);     // 0
    printf("++i = %d\n", ++i); // 1
    printf("i = %d\n", i);     // 1

    i = 0;

    printf("i = %d\n", i);     // 0
    printf("i++ = %d\n", i++); // 0
    printf("i = %d\n", i);     // 1

    return 0;
}

 

という風に、先に計算されるのか後に計算されるかの違いがあります。

これはどのような時に不都合かというと

JavaScript :

let i = 0;
while(++i < 5) console.log(i);

// 結果
// 1
// 2
// 3
// 4
let i = 0;
while(i++ < 5) console.log(i);

// 結果
// 1
// 2
// 3
// 4
// 5

 

C/C++ :

int i = 0;
while(++i < 5) printf("%d\n", i);

// 結果
// 1
// 2
// 3
// 4
int i = 0;
while(i++ < 5) printf("%d\n", i);

// 結果
// 1
// 2
// 3
// 4
// 5

という風にループ数に違いが発生するという影響があります。

 

結果としては

・ ++i の作用は式の値として、i + 1 の値を返す事、副作は i に i + 1 の結果が代入される。
・ i++ の作用は式の値として、i の値を返す事、副作用はその後 i に i + 1 の結果が代入される。

と言った違いになります。

ただ、for文のようにi++や++iが単独で現れて副作用の結果のみが使用される場合は違いがないそうです。

 

新訂版MORE EFFECTIVE C++ (ADDISONーWESLEY PROFESSIONAL CO)
  • スコット メイヤーズ
  • 価格   ¥ 4,104 prime
  • 販売者 Amazon.co.jp
クリックして今すぐチェック