当在多个声明中使用auto时,为什么需要为所有变量设置初始化器呢?
How come you need initialisers for all variables when using auto in multiple declarations?
我原以为只有第一个声明才需要初始化器。例如
auto x = 2, y;
我希望它将x的类型推断为int,然后隐式地将"auto"替换为基类型"int",这意味着y将是默认的初始化整数。实际上整个程序都无法编译因为y显式地需要初始化器。同样,
对我来说也很奇怪auto x = 2, y = 3.3;
也会导致错误。我本来希望y在double-to-int转换中初始化为3,但是:
错误:'auto': 'int'和'double'的演绎不一致
我通读了http://en.cppreference.com/w/cpp/language/auto,找不到明确的解释。实际上,那个链接似乎是站在我这边的:
一旦确定了初始化式的类型,编译器将使用从函数调用中推导模板参数的规则来确定替换关键字auto的类型(详细信息请参见模板参数推导#其他上下文)。
仅仅是"正当理由"吗?
仅仅是"正当原因"吗?
是的。
两个变量都有一个推导的类型,因此两个变量都需要一个初始化器。要求两者具有相同类型的逻辑在演绎后应用。
[C++11: 7.1.6.4/7]:
如果声明器列表包含多个声明器,则按上述方式确定每个声明变量的类型。如果每次为模板形参U
推导的类型不相同,则程序是病态的。
[C++14: 7.1.6.4/8]:
如果init-declarator-list包含多个init-declarator,它们都构成变量声明。每个声明变量的类型如上所述确定,如果在每次演绎中替换占位符类型的类型不相同,则程序是病态的。
称它为c++的一个怪东西,但我想它的存在是为了帮助保持标准措辞的简单。毕竟,如果你的例子像你描述的那样工作,它不会有点混乱(我的意思是比auto
更混乱/不清楚)吗?
相关文章:
- 将双精度变量设置为另一个变量的值
- 将变量设置为类型模板
- 如何为具有整数名称的变量设置位集
- 在 c++ 中将多个变量设置为相同的值
- 我是否必须在类中的所有变量C++设置为 private?
- 在C 中,如何使用变量设置Char Grid2d [x] [y]
- 如果将变量设置为等于新对象,旧对象会发生什么情况?
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 是否可以将类成员变量设置为类函数的结果?
- 将 c++ 代码中的当前用户环境变量设置为对其他进程(如 cmds)可见
- 此CMAKE错误意味着什么?我的变量设置为未发现
- 如何基于用户设置的初始变量设置一组常数值
- 如何使用const成员变量设置数组大小
- 使用变量设置数组长度
- 使用变量设置bitset的大小
- 在C 中,如何将派生类中的私有变量设置为基类的输入值
- C 标量变量设置为零值
- C 定义变量设置值
- 正在将类级别的2D数组变量设置为传入值-C++
- 是否有C++标准类在作用域出口处将变量设置为值