2010-12-16 82 views
8

Eric Lippert用C#写了一篇关于Why no var on fields?的文章。我很好奇,我们能在C++ 0x中做到这一点吗?恩。是否可以在C++ 0x中自动执行以下操作?

struct mystruct_t 
{ 
    auto i = 0, d = 0.0, s = std::string("zero"); 
}; 

我无法通过最新的草稿找到答案,对不起。

谢谢,

+0

我不认为汽车是在那里允许的。但即使是这样,这也不起作用,因为它会导致扣除失败。对于所有三种情况,“自动”必须是相同的类型。 – sellibitze 2010-12-16 23:51:38

+0

因此把它们放在单独的声明中很好吗?我的意思是我们实际上可以在像我在示例中展示的结构中使用auto吗? – AraK 2010-12-16 23:54:55

+4

我不知道为什么这是downvoted。这听起来像是一个有效的问题。 – 2010-12-17 07:21:08

回答

12

可悲的是你不能。该规范在7.1.6.4/3中说明,并且遵循

否则,变量的类型从其初始值设定项中推导出来。被声明的变量的名称不应出现在初始化表达式中。在块(6.3),名称空间范围(3.3.6)和for-init语句(6.5.3)中声明变量时,允许使用auto。

自动类型说明符还可用于在选择语句(6.4)或迭代语句(6.5)的条件中声明变量,或者在new-type-id中的type-speci-seq中声明变量或new-expression(5.3.4)的type-id,for-range声明中,以及在类定义的成员规范中出现的用括号或等于初始值设定项声明静态数据成员9.4.2)。

在本节中未明确允许的情况下使用auto的程序是不合格的。

我不确定为什么他们禁止auto非静态数据成员,这将是非常方便。

+0

你的回答看起来好多了,比我的好多了。我必须找时间阅读实际的C++ 0x规范... – 2010-12-17 08:26:58

+0

编译器如何确定非静态“auto”成员的类型? – 2010-12-17 09:05:49

+0

谢谢@litb :) – AraK 2010-12-17 10:21:33

相关问题