C++ auto的用法(附带实例)
C++ auto 变量是动态存储变量,只在程序执行到它时才从栈区分配存储单元,使用完毕后立刻释放该存储单元。
例如,函数形参即为 auto 变量,函数定义时并不会为其分配存储单元,函数调用时才会分配,调用完毕后会立即释放存储单元。auto 变量存放在动态存储区中。
auto 是 C++ 默认的存储类型。也就是说,凡未加存储类型说明的变量均为 auto 变量,且 auto 关键字可以省略。因此:
auto 变量具有以下特点:
1) auto 变量的作用域和生存期仅限于定义该变量的个体内。也就是说:
例如:
2) 不同的个体(函数或复合语句)中允许使用同名变量而不会混淆。例如,函数内定义的 auto 变量可以与复合语句中定义的 auto 变量同名。
例如,定义两次 auto 变量 k,分别在 if 语句内外使用此变量进行计算,观察结果,思考 auto 变量的作用。代码如下:
本例中,虽然变量名都为 k,但由于位于不同的作用域和拥有不同的生存期,其实是两个不同的变量。表面看来,就好像 if 语句内的变量“屏蔽”了外部的同名变量。
例如,函数形参即为 auto 变量,函数定义时并不会为其分配存储单元,函数调用时才会分配,调用完毕后会立即释放存储单元。auto 变量存放在动态存储区中。
auto 是 C++ 默认的存储类型。也就是说,凡未加存储类型说明的变量均为 auto 变量,且 auto 关键字可以省略。因此:
int i,j,k;等价于:
auto int i,j,k;
auto 变量具有以下特点:
1) auto 变量的作用域和生存期仅限于定义该变量的个体内。也就是说:
- 在函数中定义的 auto 变量,只在该函数内有效,无法在函数外使用;
- 在复合语句中定义的 auto 变量,只在该复合语句中有效,无法在复合语句外使用。
例如:
int Show() { auto int x, y; // 变量 x, y 的作用域为整个 Show() 函数 if(true) { auto char ch; // 变量 ch 的作用域为 if 语句块 cout << ch << endl; // 正确 cout << x << endl; // 正确 } cout << ch << endl; // 不可在 if 语句块外使用变量 ch,错误 cout << x << endl; // 正确 }
2) 不同的个体(函数或复合语句)中允许使用同名变量而不会混淆。例如,函数内定义的 auto 变量可以与复合语句中定义的 auto 变量同名。
例如,定义两次 auto 变量 k,分别在 if 语句内外使用此变量进行计算,观察结果,思考 auto 变量的作用。代码如下:
#include <iostream> using namespace std; int main() { auto int i,j,k; // 第一次定义 k,作用域为整个 main() 函数 cout << "input the number:" << endl; cin >> i >> j; k=i+j; // 令 k 等于 i、j 之和 if(i!=0 && j!=0 ) { auto int k; // 定义同名变量 k,作用域仅限 if 语句 k=i-j; // 令 k 等于 i、j 之差 cout << "k :" << k << endl; // 输出 k 的值 } cout << "k :" <<k << endl; // 退出 if 语句,返回 main() 函数,输出变量 k 的值 }程序运行结果如下图所示:
input the number:
6
2
k :4
k :8
本例中,虽然变量名都为 k,但由于位于不同的作用域和拥有不同的生存期,其实是两个不同的变量。表面看来,就好像 if 语句内的变量“屏蔽”了外部的同名变量。