0

みなさん、良い一日を。

今日、よくわからない奇妙なコードに出くわしました。この特定の問題を検索する方法さえわかりません。

動作するこのコードでは、変数の割り当ては次のように行われます。

if(condition) {
    Var1 = false, Var2 = false;
}

ここで、すべてのコマンドをコンマではなくセミコロンで終了する必要があるという印象を受けました。構文に精通している

Var1 = Var2 = false;

しかし、上に投稿されたものではありません。コンパイラ (g++) は警告などを表示しません...ここで仕様に何か不足していますか? それとも、コンパイラは私に寛大で,;内部的にをに置き換えるだけですか? もしそうなら、彼は少なくとも警告を投げるべきではありませんか?

お時間をいただきありがとうございます。

4

3 に答える 3

1

ここの仕様に何か欠けていますか?

はい、C++11 5.18 で指定された「コンマ演算子」です。左の部分式を評価し、次に右の部分式を評価し、全体的な結果は右側のものになります。

この場合、それは で区切られた 2 つの式ステートメントと同等です。;

if/while/forこれは、1 つの式しか許可されていないが、複数のことを実行したい場合などに役立ちます。

while (++i, --j != 0)

また、複数のステートメントを一緒に詰め込んで、コードを読まなければならない人を困難にする場合もあります。

于 2013-10-01T09:06:05.250 に答える
1

C および C++ プログラミング言語では、コンマ演算子 (トークン , で表される) は、最初のオペランドを評価して結果を破棄し、2 番目のオペランドを評価してこの値 (および型) を返す二項演算子です。(続きを読む)

于 2013-10-01T08:58:53.043 に答える
1

Alexandru Barbarosie が指摘したように、https: //stackoverflow.com/questions/1613230/uses-of-c-comma-operator で何が起こっているかについての完全な説明があります。

この投稿に出くわした人のために簡単に要約すると、 for ループなどの外で使用すると、 は,実際には と同じ効果があり;ます。

詳細については、リンクをご覧ください。

于 2013-10-01T09:00:08.883 に答える