2

for私は非常に珍しい状態で次のループに出くわしました

int main( int argc, const char* argv[] ) {
    for ( int i = 0 ; i < ( 10, 20 ) ; i++ ) {
        cout << i << endl;
    }
}

このソースコードは正常にコンパイルされました。i0から19までの値でループを実行し10ました(式(10, 20)のは反復回数に影響を与えないようです)。

私の質問:
この条件構文は何ですか?なぜコンパイルエラーが発生しないのですか?

編集:
全体像:この質問はバグから始まりました。元の状態は想定されていたのでi < std::min( <expr A>, <expr B> )、何らかの理由でを省略しましたstd::min

それで、なぜコードが最初にコンパイルされたのか疑問に思いました。これで、バグは正当な(役に立たないものの)構文であることがわかりました。

ありがとう!

4

3 に答える 3

7

ですcomma operator。式の両側を評価し、正しいものを返します。

したがって、式(10, 20)は何もしませんが、「20」を返します。

も参照してください

于 2013-03-12T11:42:07.327 に答える
3

(10, 20)は整数10を評価し、次に20を評価し、次に20(右端)を返すことを意味します。つまり、20を意味します。

コンマ演算子はfor、次のようなことを可能にするため、ループで役立つことがよくありますx = 0, y = 1(つまり、1つの式に2つの割り当てがあります)が、ここでは役に立ちません。

于 2013-03-12T11:42:10.913 に答える
0

,C ++の演算子は、最初の値をチェックし、それを破棄して次の値を返す2項演算子として機能します。要するに。

for(int i=0;i<(10,20);i++)に等しくなりますfor(int i=0;i<20;i++)

于 2013-03-12T11:45:02.643 に答える