2010-12-16 76 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

相關問題