Webサイト工事中です! 閲覧できますが不具合があるかもしれません

i++と++iの違いに関する覚書

覚書です。

 

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)

新訂版MORE EFFECTIVE C++ (ADDISONーWESLEY PROFESSIONAL CO)

スコット メイヤーズ
4,180円(07/27 13:25時点)
Amazonの情報を掲載しています
JavaScript逆引きレシピ 第2版

JavaScript逆引きレシピ 第2版

山田 祥寛
2,772円(07/27 13:25時点)
発売日: 2018/10/15
Amazonの情報を掲載しています

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

SESSIONS や Tokyo Demo Fest 等のイベントを主催してる人
各種最適化やIT・インフラ・3DCGが好き
◆YouTube: http://youtube.com/@FL1NE_
◆X(Twitter): @FL1NE

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次