【问题标题】:Is `auto int i` valid C++0x?`auto int i` 是有效的 C++0x 吗?
【发布时间】:2011-02-20 07:44:11
【问题描述】:

在回答this question 时,出现了关于关键字auto(自动存储)的传统C 含义在C++0x 中是否仍然有效的问题现在它意味着类型推导。

我记得auto 的旧含义应该保留在相关但其他人不同意的地方。

auto char c = 42; // either compilation error or c = '*'

查看编译器,我看到了当前的划分。

  1. auto 的旧含义不再允许
    • VS10
    • g++
  2. 在相关的地方使用 auto 的旧含义

你知道哪个是正确的行为吗?

【问题讨论】:

    标签: c++ c++11 standards-compliance


    【解决方案1】:

    不,不是。事实上,§7.1.6.​4/3 给出了以下示例:

    auto x = 5; // OK: x has type int
    const auto *v = &x, u = 6; // OK: v has type const int*, u has type const int
    static auto y = 0.0; // OK: y has type double
    auto int r; // error: auto is not a storage-class-specifier
    

    如您所见,它会导致错误。 §7.1.6.​5 几乎可以达成交易:

    在本节未明确允许的上下文中使用 auto 的程序是格式错误的。

    【讨论】:

    • @Pavel:我几乎不会说它没用或坏掉。您发现auto 在当前 C 或 C++ 代码中根本被使用的频率如何?
    • 它不会破坏任何真正的程序,它使语言更易于理解。汽车的旧含义是无用的。
    • 事实上,任何被破坏的程序都应该被破坏。旧的用法比没用更糟糕;这是误导。
    • @Pavel:我会接受理论上这是一个突破性的更新(因为毕竟有一种方法可以编写适当的 C++03 代码来破坏这种变化。)但我认为你'在不同意这种变化方面完全被误导了。字面上不应该有使用auto 的现代代码,因为它是多余的。还不如从中做出一些有用的东西。此外,您的兼容性似乎与 C 无关,这毫无意义且无关紧要。 C++ 不是 C,谁在乎什么不匹配。您是否因为模板破坏了 C 兼容性而抱怨模板?
    • @Pavel:“不使用旧汽车”的理由还不够吗?没有使用 C++ 代码auto。从字面上看,它可以从语言中剥离出来,99% 的代码(100% 的好代码)将保持不变。引入新关键字比重复使用旧关键字要糟糕得多。我真的没有看到你的抱怨。没有什么是坏的。如果您的代码从这个更改中中断,那么您正在编写糟糕的代码,句号。
    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2022-01-07
    • 1970-01-01
    • 2016-06-01
    • 2013-04-24
    相关资源
    最近更新 更多