Objective C、n ++と++ nの違い

increment objective-c operator-keyword
Objective C、n と nの違い

Objective-Cでは、n と nに違いはありますか(例: forループで使用されますか?)

  2  1


ベストアンサー

「++ n;」は、式が評価される前に「n」の値を*インクリメント*します。

`n ++;`は、式が評価された後、* n *の値をインクリメントします。

この結果を比較してください

int n = 41;
int o = ++n; //n = 42, o = 42

この結果で:

int n = 41;
int o = n++; //n = 42, o = 41

ループの場合:

for (int i = 0; i < j; i++) {/*...*/}

ただし、次のようなものがない限り、違いはありません。

for (int i = 0; i < j; x = i++) {/*...*/}

またはこれ:

for (int i = 0; i < j; x = ++i) {/*...*/}

1つ言うことができます。

_
同じ式内で2番目の(関連する)変数が(nに基づいて)変更されない限り、「n 」を使用するか「 n」を使用するかは関係ありません。
_

” ” ‘

同じルールが `–n;`と `n– ;;にも当てはまります。

16


nは、使用される前に値をインクリメントし(プリインクリメント)、n がインクリメントしてから(ポストインクリメント)します。

forループのコンテキストでは、ループ内のコードが実行された後に増分が適用されるため、目に見える違いはありません。

3


` n`と` n `は式の評価対象が異なります。 例:

int n = 0;
NSLog(@"%d", n);   // 0
NSLog(@"%d", n++); // still 0, increments afterwards
NSLog(@"%d", n);   // 1
NSLog(@"%d", ++n); // 2, because it increments first
NSLog(@"%d", n);   // 2

2


ループでは違いはありません。 しかし、「++ n」の方が速いと言う人もいます

0


Scott Meyersの「More Effective C 」Bookでは、接尾辞の増分よりも接頭辞の増分を好む非常に合理的なケースを作成しています。 一言で言えば、その言語では、演算子のオーバーロード機能によるプレフィックスのインクリメントは、ほとんど常に高速です。 Objective Cはオーバーロードされた演算子をサポートしていませんが、C またはObjective-C ++のプログラミングがある場合、または行う予定がある場合は、接頭辞の増分を優先することをお勧めします。

ほとんどの場合、++ nは次のようになります。

n = n + 1
[do something with n]

一方、n ++は次のようになります(意図したとおりに使用する場合)。

register A = n;  // copy n
[do something with n]
n = A + 1;

あなたが見ることができるように、接尾辞のケースにはより多くの指示があります。 単純なforループでは、ほとんどのコンパイラーは、プリインクリメントnが使用されないことが明らかであるが、そのケースがプレフィックスケースに委ねられる場合、コピーを回避するのに十分スマートです。

これが理にかなっていることを願っています。 要約すると、実際に評価の「副作用」動作が必要な場合を除いて、プレフィックスを使用する必要があります。その後、ポストフィックスバージョンから取得します。

0


上記のように、+ *-n *は、式が評価される前にnの値をデクリメントします。

  • n-; *式が評価された後、nの値をデクリメントします。

ここで注意すべきことは、whileループを使用する場合です

例えば:

n = 5
while(n--) #Runs the loop 5 times
while(--n) #Runs the loop 4 times

n—​と同様に、n = 1の間にループが余分に実行されますが、-n 1では、最初に0にデクリメントされてから評価されます。 これにより、whileループが中断します。

0


タイトルとURLをコピーしました