[過去ログ] C#, C♯, C#相談室 Part96 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
375(1): デフォルトの名無しさん (ラクッペペ MMee-kNao) [sage] 2022/07/30(土) 20:09:53.26 ID:2QzW5DDXM(1/2) AAS
言語仕様としては厳密には未定義なのかも知れないが、少なくとも>>370370(2): デフォルトの名無しさん (アウアウウー Sa09-WuFg) [sage] 2022/07/30(土) 18:54:16.32 ID:jErZjSQja(1) AAS
皆さん、インクリメントとデクリメントについてどのようにお考えですか?
個人的にこれを使うことに抵抗があります(無知が理由で)
特に、内部メソッド等にローカルなintを渡して処理後に1だけ加算したいときってよくあると思うんですが、
int num = 0;
M(num); num++; これと
M(num++); これは、本当に常に一致してくれるんでしょうか?
IL上での違いはこんな感じでした
// M(num);
IL_0003: ldloc.0
IL_0004: call void C::'<M>g__M|0_0'(int32)
IL_0009: nop
// num++;
IL_000a: ldloc.0
IL_000b: ldc.i4.1
IL_000c: add
IL_000d: stloc.0
IL_000e: nop
// M(num++);
IL_0003: ldloc.0
IL_0004: dup
IL_0005: ldc.i4.1
IL_0006: add
IL_0007: stloc.0
IL_0008: call void C::'<M>g__M|0_0'(int32)
IL_000d: nop
IL_000e: nop
これって最終的には同じコードなんでしょうか?
可読性以外の差異がありましたら教えていただけないでしょうか。よろしくお願いします
のILの中身見た限りでは引数評価後に関数呼び出しが行われる様に実装されてる
376(1): デフォルトの名無しさん (ラクッペペ MMee-kNao) [sage] 2022/07/30(土) 20:14:24.72 ID:2QzW5DDXM(2/2) AAS
未定義というより環境依存かな
大抵の言語では関数の呼出しと引数の評価順は明確化されてないのでいわゆる副作用として扱われる
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.066s