- PR -

C#でi++と++iについて

投稿者投稿内容
pt
会議室デビュー日: 2004/11/05
投稿数: 14
投稿日時: 2004-12-14 16:50
いつもお世話になってます。
さっそくですが、iの値を1ずつ増やしていく場合、「i++」と「++i」で違いがあるのでしょうか??ご存知の方がいらっしゃいましたら、ご教授下さい。
未記入
常連さん
会議室デビュー日: 2004/11/30
投稿数: 21
投稿日時: 2004-12-14 17:07
Console.WriteLine(i++);
Console.WriteLine(++i);
で調べてみてはいかがでしょうか?
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-12-14 17:12
まず、結果を使わないという前提で、ほぼ同じです。

VC++6.0の場合は、iが数値ならば、アセンブラも一緒です。
iがSTL::listの反復子の場合は、アセンブラが異なります。
(++iの方が無駄な命令がないので、効率的)

C#の場合は、コンパイルしてMSILを見てみればわかるかと思います。
(誰かお願い)

ちなみに、私は、どちらでもよい場合は、++iと書きますが、
世間一般では、K&Rの影響から、i++が圧倒的に多いです。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-12-14 17:13
ソースの読みやすさに違いがある, 記号が前にあるほうが、読みにくい。
といっても、すぐ慣れます。どちらでも良い、が答えです。
左利き、右利き みたいなもの

[ メッセージ編集済み 編集者: MMX 編集日時 2004-12-14 17:22 ]
yyy
常連さん
会議室デビュー日: 2004/01/27
投稿数: 33
投稿日時: 2004-12-14 17:23
「for」の構文にて利用する場合、条件比較してからインクリメントするのか、
インクリメントしてから条件比較するかのを意識する以外は、i++を利用して
います。
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-12-14 17:36
単純に一文で i++, ++i しか行わないなら結果は変わりません。
---
実用的なことを知りたいならそれで十分ですが、言語仕様を知りたいなら話は変わってきます。ドキュメントを読んでね、と書いている回答者がいないことが不思議だったりします。
---
7.5.9 後置インクリメント演算子と後置デクリメント演算子
引用:

x++ または x-- の形式の後置インクリメントまたはデクリメント演算子の実行時の処理は、次の手順で構成されています。

x が変数の場合 :

  • x を評価して変数を生成します。
  • x の値を保存します。
  • 保存した x の値を引数として、選択された演算子を呼び出します。
  • 演算子から返される値を x の評価によって得られる場所に格納します。
  • 保存された x の値が、演算の結果になります。




7.6.5 前置インクリメント演算子と前置デクリメント演算
引用:

++x または --x の形式の前置インクリメントまたはデクリメント演算子の実行時の処理は、次の手順で構成されています。

x が変数の場合 :

  • x を評価して変数を生成します。
  • x の値を引数として、選択された演算子を呼び出します。
  • 演算子から返される値を x の評価によって得られる場所に格納します。
  • 演算子から返された値が、演算の結果になります。




それぞれプロパティの場合等もありますが、とりあえず変数の場合だけ引用。
a=x++;
a=++x;
で結果が異なる、というのは有名な話なので。
pt
会議室デビュー日: 2004/11/05
投稿数: 14
投稿日時: 2004-12-14 17:36
ありがとうございました。たくさんの返答を頂き感謝感激です。
皆さんの返答を理解したのち、Console.Writeで実験してみました。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-12-14 20:51
「どちらでも良い」けれど「どちらも一緒」ではない、ということも、一応。

#意味のある例を提示できなくて申し訳ないんですが…。

コード:
for (int i = 0; ++i <= 10;)
    Console.WriteLine(i);

for (int i = 0; i++ <= 10;)
    Console.WriteLine(i);


スキルアップ/キャリアアップ(JOB@IT)