複合ステートメントの範囲
複合ステートメントの先頭では、外部変数を使用できるだけでなく、新しい変数を直接宣言することもできます. そのようなローカル変数のスコープは、複合ステートメント全体になります. 複合ステートメント内でのみ使用できる一部の変数については、このメソッドを使用して、そのスコープが外側に広がるのを防ぐことができます。これは、構造化プログラミングにとって有益です。
複合ステートメントの範囲
#include<iostream>
using namespace std;
//复合语句的作用域
int main()
{
//复合语句
if ( int a = 0 )
cout << "a的值为:" << a <<endl;
else
cout << "a的值为:" << a << endl;
//a在复合语句外不可见
//cout <<"a的值为:" << a << endl;
return 0 ;
}
この例は、条件ステートメントの先頭で変数が定義されている場合を示しています。a は条件ステートメントで表示され、ステートメントの終了後に自動的に破棄されます。最後の print ステートメントのコメントを削除すると、a の定義が見つからないため、コンパイラはエラーを報告します。
このような
#include<iostream>
using namespace std;
//复合语句的作用域
int main()
{
//复合语句
if ( int a = 0 )
cout << "a的值为:" << a <<endl;
else
cout << "a的值为:" << a << endl;
//a在复合语句外不可见
cout <<"a的值为:" << a << endl;
return 0 ;
}
エラーは次のように報告されます。
注意if ステートメントで変数を定義する場合、変数の初期値を if ステートメントの条件として暗黙的に使用します。複合文の先頭で変数を宣言するより一般的な例は、前の例で示した for ループ先頭の最初の部分の宣言です。たとえば、"for (int i= 0; i>=0; i++ )" "int i= 0;" の場合、ここに隠されたセマンティクスの問題はありません。空のステートメントであっても、ループは通常どおり実行できます。
この記事が役に立った場合は、いいねとサポートをお願いします~