美文网首页C++基础知识
关键字auto的前世今生-未完

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

作者: 安然_fc00 | 来源:发表于2017-03-21 22:52 被阅读3次

一. 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<double> scores;
std::vector<double> ::iterator pv = cores.begin();

C++允许这样做

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

相关文章

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

    一. auto的前世今生 《C++Primer Plus》中这样描述auto 在C语言和C++11版本之前的C++...

  • 自动布局 Auto Layout (原理篇)

    目录 0、前言 一、Auto Layout前世今生 二、Auto Layout基础知识 1.Auto Layout...

  • 前世今生

    今生的妻子,是前世你埋的人,来报未完的恩~ 今生的儿子,是前世的债主,来追未还的债~ 今生的女儿,是前世的情人,来...

  • Auto Layout详解

    Auto Layout前世今生 Auto Layout ,是苹果公司提供的一个基于约束布局,动态计算视图大小和位置...

  • 前世未完,今生未了

    《前世未完,今生未了 》 爷爷是个作家,出版了几本书,近年来,爷爷常年坐在院子里望着天空发呆落泪,我们都以为...

  • 三行成诗

    爱 你 ,(我们的故事 未完待续,) 爱 你 。(我们的前世今生 到此为止。)

  • 我曾见过你

    我曾见过你 或是前世,亦是今生 若非如此 便让我来世告诉你 前世 我不记得自己 只记得有什么事未完 今生 我只记得...

  • 今生是前世未完的待续

    邢知: 每天醒来的第一件事,就是喊你的名字,听见你的呢喃总让我心安,待我做完早餐,你通常还赖在床上,我静静趴在床边...

  • 所有的遇见,都是一种偿还

    前世不欠,今生不见;今生相见,皆有因缘。 每一场遇见,都有意义。 也许是曾有过亏欠,也许是还有未完的心愿。 我们遇...

  • IOS-Block

    Block初探 blcok的分类 不同关键字修饰的变量auto和static在OC中有个默认的关键字auto,在我...

网友评论

    本文标题:关键字auto的前世今生-未完

    本文链接:https://www.haomeiwen.com/subject/nsqnnttx.html