演算順序が良くわかりません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

演算順序が良くわかりません

#1

投稿記事 by dom » 13年前

コード:

int main()
{
	int N = 100, a = 0;
	for (int i = 0; i < 200; i++) {
		std::cout << a << std::endl;
		a = (a++) % N;
	}
	
	return 0;
}
すべてのiについてaは0~99であってほしいのに、あるところでaが100となります。
考えたところ,
a = a % N;
a++;
となっているようなのですが、なぜこうなるのでしょうか?


dom

Re: 演算順序が良くわかりません

#3

投稿記事 by dom » 13年前

文が終わってから評価されるということですか。そうすると、
後置増分演算子の順位はなんのために存在するのでしょうか?

non
記事: 1097
登録日時: 15年前

Re: 演算順序が良くわかりません

#4

投稿記事 by non » 13年前

dom さんが書きました:後置増分演算子の順位はなんのために存在するのでしょうか?
面白い疑問ですね。演算順位であるのはおかしい。確かに。
すると、コンパイラの評価順ってことでしょうかね。
例えば
c=a+++b;
の場合、c=(a++)+b;のようにコンパイラが評価する。
non

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 演算順序が良くわかりません

#5

投稿記事 by softya(ソフト屋) » 13年前

副作用完了点までの間に変数を2度変更していることになるので、どうなるかは規約的には未定義だと思います。
「初級C言語Q&A(7)」
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
ここでは単に未定義って書いてありますね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dom

Re: 演算順序が良くわかりません

#6

投稿記事 by dom » 13年前

なるほど、式の中でいつインクリメントされるかは決まっていないのですね。
ありがとうございます、解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る