C++ 複合ステートメントのスコープ

複合ステートメントの範囲

複合ステートメントの先頭では、外部変数を使用できるだけでなく、新しい変数を直接宣言することもできます. そのようなローカル変数のスコープは、複合ステートメント全体になります. 複合ステートメント内でのみ使用できる一部の変数については、このメソッドを使用して、そのスコープが外側に広がるのを防ぐことができます。これは、構造化プログラミングにとって有益です。

複合ステートメントの範囲

#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;" の場合、ここに隠されたセマンティクスの問題はありません。空のステートメントであっても、ループは通常どおり実行できます。

この記事が役に立った場合は、いいねとサポートをお願いします~

おすすめ

転載: blog.csdn.net/m0_62870588/article/details/123704732