關鍵字auto用於聲明自動變量,聲明的變量可以省略標識符auto(關鍵字只是編譯器中的壹個特定標識符)。如下所示:
auto int a;(自動變量)
char b;(自動變量的默認形式)
在C++中,自動變量的作用域(程序中變量值的活動範圍)只是變量所在的程序塊或者程序塊內部的程序塊。
說明自動變量範圍的示例:
# include & ltiostream.h & gt
主()
{
int I;(默認自動變量)
int j;
cout & lt& lt“I in outer block is”& lt;& lt我& lt& lt”\ n”;
cout & lt& lt“外部塊中的j是”& lt& ltj & lt& lt”\ n”;
cout & lt& lt“外部塊中的k是”& lt& ltk & lt& lt”\ n”;
{(如您所見,這是壹個內部程序塊)
int k;(默認自動變量)
cout & lt& lt“I in inner block is”& lt;& lt我& lt& lt”\ n”;
cout & lt& lt“內部塊中的j是”& lt& ltj & lt& lt”\ n”;
cout & lt& lt“內部塊中的k是”& lt& ltk & lt& lt”\ n”;
}(回到外部塊)
cout & lt& lt“我在外街區回來了”& lt& lt我& lt& lt”\ n”;
cout & lt& lt" j back in outer block is " & lt& ltj & lt& lt”\ n”;
cout & lt& lt" k back in outer block is " & lt& ltk & lt& lt”\ n”;
}
(可以看出,int表示的數據類型多種多樣,編譯器可能會自動識別int的數據,而{}的位置可以看出代碼在哪個程序塊中,main最大。)
編譯後,您將得到以下錯誤消息:
錯誤:函數main()中有未定義的符號“k”
錯誤:函數main()中有未定義的符號“k”
這是因為變量k是壹個自動變量,它是在內部塊中聲明的,所以它只能在內部塊中存在和被訪問。在外部塊中,編譯器不知道k的值(在外部塊中,它超出了k的範圍)。
修正方法:在內部程序express中刪除K的聲明,在外部程序塊中聲明K即可。
因此得到輸出結果:
我在外面的街區是8886
外部區塊中的j是18
外部塊中的k為0
我在內座是8886
內塊中的j為18
內部塊中的k為0
我回到外間街區8886號
j回到外部區塊是18
外部塊中的l back為0
那麽,I,J,K中的值從何而來呢?
在C++中,如果壹個自動變量沒有在它自己的範圍內初始化,那麽這個變量就是
它可能包含隨機的無用信息值。假設變量I、J和K的初始聲明如下:
int I = 1;
int j = 2;
int k = 3;
最初的結果是:
外部塊中的I是1
外部塊中的j是2
外部塊中的k是3
內部塊中的I是1
內部塊中的j是2
內部塊中的k是3
我在外區的回座是1
j回到外部塊是2
l回到外部塊是3
編譯成功。