1

arr[0]++;C# では、コード (すべて 1 つのステートメントであり、大きなステートメントの一部ではない)とコードの間に違いはありますか?++arr[0];

C / C++ / Objective-Cでは、これは同じことをしないことを完全に理解しています。最初のケースでは、arrの0番目のインデックスで値を取得し、その値を1つ増やしますが、2番目のケースでは、のポインター値を増やしますarr であり、その 0 番目の位置には何もしません ( と同じarr[1]; arr++;)。

sth のおかげで、これは C# と C / C++ / Obj-C で同じであることを思い出させてくれました。

ただし、C# の 2 つのステートメントに違いはありますか?

4

4 に答える 4

11

arr[0]++の最初の要素の値を返しarr、それをインクリメントします。

++arr[0]の最初の要素の値をインクリメントしてarrから返します

違いは、これをより長い命令の一部として使用している場合にのみ重要です。例えば ​​:

arr[0] = 42;
int x = arr[0]++; // x is now 42, arr[0] is now 43

次と同じではありません:

arr[0] = 42;
int x = ++arr[0]; // x is now 43, arr[0] is now 43
于 2010-10-19T12:30:48.097 に答える
1

単一のステートメントであれば、違いはありません。

于 2010-10-19T12:30:24.860 に答える
1

++x はインクリメントしてから戻りますが、x++ は x の値を返し、次にインクリメントします。しかし、価値を受け取る人がいなければ、それはまったく同じです。

于 2010-10-19T12:32:13.973 に答える
0

そのステートメントが単独で存在する場合、最適化コンパイラは同じコードを生成する必要がありますが、インラインで変更している値を使用している場合、ポストインクリメントでコピーを作成する必要がある場合があります (古い値を操作できるようにするため)。配列が高価なコピー コンストラクターを持つ型の場合、高価になります。

于 2010-10-19T12:56:30.167 に答える