1.自動存儲持續性(經典情況,不同作用域同名參數的“覆蓋”)
在默認情況下,在函數中聲明的函數參數和變量的存儲持續性爲自動,作用域爲局部,沒有鏈接性。在程序執行其所屬代碼時被創建,在執行完函數或者代碼塊時,它們使用的內存被釋放。
#include <iostream>
using namespace std;
int main()
{
int value = 1;//作用域爲整個main函數
cout << "花括號外value= " << value << " &value= " << &value << endl;
{
int value = 333; //作用域僅爲花括號內部
cout << "花括號內value= " << value << " &value= " << &value << endl;
}
cout << "花括號外value= " << value << " &value= " << &value << endl;
cin.get();
return 0;
}
C++ primer plus的解釋是程序在執行內部代碼塊中的語句時,將value解釋爲局部代碼塊變量。我們說新的定義隱藏了以前的定義,新定義可見,舊定義暫時不可見。在程序離開該代碼塊時,原來的定義又可見。
程序中第一個cout語句輸出作用域爲main函數的value及其地址,第二行cout輸出代碼塊中的value,此時代碼塊中的value暫時隱藏了main中的value,它們不是同一個變量,在value=333代碼塊結束後,main中的value又重新可見