C++中變數的作用域
阿新 • • 發佈:2019-01-02
作用域(scope)是程式的一部分,在其中名字有其特定含義
C++語言中大多數作用域都以花括號分隔
注意:同一個名字在不同的作用域中可能是指向的是不同的實體,實體的有效區域始於名字的宣告語句,以宣告語句所在的作用域末端結束
如上面的程式的例子,main定義於所有花括號之外,所以是擁有全域性作用域,一旦宣告之後,全域性作用域中的名字在整個程式的範圍之內都可以使用。
int main()
{
int sum = 0;
for(intval = 1; val<= 10; ++val)
sum+= val;
std::cout << "Sum of 1 to 10 is" << sum << std::endl;
return 0;
}
如上面的程式的例子,main定義於所有花括號之外,所以是擁有全域性作用域,一旦宣告之後,全域性作用域中的名字在整個程式的範圍之內都可以使用。
sum擁有塊作用域(blockscope),在main函式之中都可以使用,但是出了main之後,就無法進行訪問了。
這裡有一個建議就是,在物件第一次被使用的時候再定義它,如:
int a = 0;
printf(a);
int b = 1;
printf(b);
注意,在C的規範中是不允許這麼做的,但是C++支援並且建議這麼做,並且對於C來說,不同的編譯器有差異,如gcc就支援,這樣做的好處是有助於更容易找到變數的定義,更重要的是,靠近第一次被使用的地方,我們會賦給它一個更加合理的初值