2012-12-23 76 views
4
struct X 
{ 
    int a; 
    int b; 
}; 

int f(X x) 
{ 
    return x.a + x.b; 
} 

int main() 
{ 
    int n = f({1, 2}); 
} 

的Visual Studio 2012(十一月CTP)報道:爲什麼初始化列表不能用作參數?

error C2664: 'int f(const X &)' : cannot convert parameter 1 from 
'initializer-list' to 'X' 

Reason: cannot convert from 'initializer-list' to 'X' 
Only an initializer-list with zero or one elements can be converted to this type 

Build FAILED. 
+2

Clang 3.1和g ++ 4.7.2編譯這段代碼沒有任何錯誤。 – soon

+0

然後這似乎是一個VC++的bug,雖然它聲明它已經支持這個功能。 – xmllmx

+0

已知VC++在不同部分被打破 –

回答

1

的Visual Studio 2012(十一月CTP)報道:

它甚至不是一個測試編譯器。它應該工作。我會鏈接到你在ideaone上的代碼,但是這個網站不會那麼做。

提交錯誤報告。

+2

順便說一句,這裏的[Ideaone鏈接](http://ideone.com/05feuD)該網站不會讓我使用。 –

1

如果你想列表樣式語法通過初始化程序到你的構造函數,那麼你必須一個std::initializer_list類型傳遞給你的構造。這種類型將在傳遞{ }語法樣式構造時構造一個類型的數組。

+0

我覺得這種風格很有表現力。標準爲什麼不支持它? – xmllmx

+2

如果我必須添加一個構造函數,那麼X不再是POD類型,這正是我想要的。 – xmllmx

相關問題