【发布时间】:2013-05-14 14:01:47
【问题描述】:
似乎不允许使用auto 关键字声明多个不同类型的变量。但是,我无法弄清楚标准中会阻止它的措辞。
auto i = 1, j = 1.0; //deduction failure (several compilers)
从历史上看,我理解,因为您只有一个 decl-specifier-spec。然而,标准中的规则似乎并没有排除,事实上它们鼓励auto 可以是每个不同的类型。考虑以下段落:
8-3 声明中的每个 init-declarator 都被单独分析,就好像它自己在声明中一样。
7.1.6.4-7 如果声明符列表包含多个声明符,则确定每个声明变量的类型 如上所述。 [...]
即使没有auto,也不是所有变量都需要具有相同的类型,因为像* 这样的某些修饰符可以单独应用于每个声明符。在我看来,现在的措辞似乎允许每个 auto 声明符是完全不同的类型。
哪一段会禁止这样做?
【问题讨论】:
-
顺便说一句 - 7.1.6.4/3 中的示例用法是
const auto *v = &x, u = 6; // OK: v has type const int*, u has type const int- 显然这个想法是在创建后续变量时可以使用第一个变量的类型推导......
标签: c++ c++11 language-lawyer