关键字auto的前世今生-未完

一. auto的前世今生

《C++Primer Plus》中这样描述auto

在C语言和C++11版本之前的C++中,关键字auto用于显式地指出变量为自动存储:

int froob(int n)
{
    auto float forf;  //ford has automatic storage
}

由于只能将关键字auto用于默认为自动的变量,因此程序员几乎不使用它。它的主要用途是指出当前变量为局部自动变量。
在C++11中,这种用法不再合法。制定标准的人不愿引入新关键字,因为这样可能导致将该关键字用于其他目的的代码非法。考虑到auto的老用法很少使用,因此赋予其新含义比引入新关键字是更好的选择。

C++11新增了一个工具,让编译器能够根据初始值的类型判断变量的类型。为此重新定义了auto。在初始化声明中,如果使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同:

auto n=100;  //n is int
auto x=1.5;  //x is double
auto y=1.3e12L;  //y is long double

自动推断类型并非为这种简单情况设计的;实际上,如果将其用于这种简单情形,甚至可能让你误入歧途。比如假设你要将x,y,z都指定为double类型,并编写了代码:

auto x=0.0;  //x is double because 0.0 is double
double y=0;  //0 automatically converted to 0.0
auto z=0;  //  z is int because 0 is int

显式地声明类型时,将变量初始化为0(而不是0.0)不会导致任何问题,但采取自动类型推断时,却会导致问题。

二. auto真正的用武之地-未完

处理复杂类型,如STL中的类型时,auto的功能有时才能显现出来。例如对于以下代码:

std::vector scores;
std::vector ::iterator pv = cores.begin();

C++允许这样做

std::vector scores;
auto pv = scores.begin();

你可能感兴趣的:(关键字auto的前世今生-未完)