首页 > 编程笔记 > C++笔记 阅读:62

C++ auto的用法(附带实例)

C++ auto 变量是动态存储变量,只在程序执行到它时才从栈区分配存储单元,使用完毕后立刻释放该存储单元。

例如,函数形参即为 auto 变量,函数定义时并不会为其分配存储单元,函数调用时才会分配,调用完毕后会立即释放存储单元。auto 变量存放在动态存储区中。

auto 是 C++ 默认的存储类型。也就是说,凡未加存储类型说明的变量均为 auto 变量,且 auto 关键字可以省略。因此:
int i,j,k;
等价于:
auto int i,j,k;

auto 变量具有以下特点:
1) 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 为 auto 变量,第一次输出的是 i-j 的值,第二次输出的是 i+j 的值。

本例中,虽然变量名都为 k,但由于位于不同的作用域和拥有不同的生存期,其实是两个不同的变量。表面看来,就好像 if 语句内的变量“屏蔽”了外部的同名变量。

相关文章