【问题标题】:auto keyword strange behavior in C++11C++11 中的 auto 关键字奇怪行为
【发布时间】:2012-08-24 09:42:09
【问题描述】:

仅理论问题 - 为什么我不能编写这样的代码:

auto auto foo = 0;

第一个 auto 关键字 - 存储类说明符(是的,我知道它在 C++11 中无用且已弃用),第二个 auto 关键字 - auto 类型说明符。

那怎么了?

再一次 - 我真的不想在实际代码中使用它。

【问题讨论】:

  • 看看 C++11 标准中的 [dcl.spec.auto]。 5:在本节未明确允许的上下文中使用 auto 的程序是格式错误的。在 C++03 用法之前没有提及。
  • 他们真的删除了auto 的旧含义。请参阅我自己的问题:stackoverflow.com/questions/12093717/…。也许不相关 - 但我相信这是完全有效的:static auto a = 7;

标签: c++ c++11


【解决方案1】:

auto 存储类说明符并非“在 C++11 中无用且已弃用”,它已被完全删除。 auto 关键字不再是存储类说明符,不能作为一个。

在 C++11 中,auto 是一个简单的类型说明符。

【讨论】:

  • 哦,我明白了:更改:删除 auto 作为存储类说明符
  • 是的,这是一个重大更改,但没关系,因为以前使用 auto(作为存储类说明符)是多余的。
  • 同样重要的是:这是一个嘈杂的破坏性更改,因为旧的破坏代码无法在新的语言规则下编译。尽管 C++11 有 some of those too,但无声的重大更改要糟糕得多。
【解决方案2】:

来自Stroustrup's FAQ

....auto(“这是一个局部变量”)的旧含义现在是 非法的。几名委员会成员通过数百万行拖网 的代码只发现了少数用途——其中大部分在 测试套件或似乎是错误。

这表明没有使用“auto”作为存储说明符的代码。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2021-02-18
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多