-2

forサイクルの奇妙な振る舞いに気づきました...

ケース1:

i変数の内部初期化をしましょう

for ( int i=10; i <=10; i++)
{
    std::cout << i;
}
return 0;

出力:

10

ケース2:

ここで、サイクル外でiを初期化します

int i = 10;

for ( ; i <=10; i++)
{
    std::cout << i;
}
return 0;

出力:

Nothing will be print

ケース3:

iに関係のない変数の初期化:

int i = 10;

for ( int k = 0 ; i <=10; i++)
{
    std::cout << i;
}
return 0;

出力:

10

質問

サイクル条件の結果を、変数iを初期化する場所にどのように依存させることができますか?

更新された結果

deguggerを使用してコードをトレースしたところ、ケース2ではVS2010が実際にサイクルを飛び越えました。ただしg++は正常に機能します。たぶんコンパイラのバグ?

Fianalの結果 再起動後、正しく機能します。天と地の間の何か。役に立たない質問でごめんなさい…。

4

2 に答える 2

0

ケース 2 が10出力されない場合は、コンパイラにバグがあるか、出力がフラッシュされていません。<< "\n"aも出力に追加します。

于 2012-08-17T10:42:49.643 に答える
0

2番目のものも印刷され10ます。そうでない場合は、コンパイラにバグがあるか、間違ったコンパイラを使用しています。

で同じコードを実行しましたhttp://ideone.com/UB0V0。それを見てもらうことができます。それは印刷します10

于 2012-08-17T10:48:12.513 に答える