2011-07-18 16 views
2

我只注意到,在N3291的改變被標註爲(5.2.1下標[expr.sub]):C++ 0x:爲什麼禁止在「operator []」中使用「braced-init-list」?

之前,這是確定超載operator[]支撐-初始化列表

struct X { 
    Z operator[](std::initializer_list<int>); 
}; 
X x; 
x[{1,2,3}] = 7; // OK: meaning x.operator[]({1,2,3}) 

現在是刪除,取而代之的

一個支撐,初始化列表不得與內置的下標操作符一起使用。

問題是什麼?

+0

我看到'x [{1,2,3}]'的第一反應是「呃,什麼......」。也許這就是原因。這基本上創建了一個'operator []',它有一個不尋常的語法和一些未知數量的參數(它在概念上對'operator []'是有意義的取1,2,3還是755的索引?)。而且,它只是困惑你:P – Damon

+0

不,我剛剛發現它:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3236.html#798 - 他們只是移動它因爲這是一個奇怪的地方。 – towi

回答

9

x[{1,2,3}]不是內置的[]運營商。它調用用戶定義的運算符函數。所以深吸一口氣,繼續使用這個有趣的語法。

+0

很好放。我只看到了紅色標記的透視部分,受到了如此震驚,我可能沒有看到實際的單詞*「內置」*。是的,我想*會使用它。首先,它可能非常有效(如果編程正確,不需要複製),其次,它允許非常強大的構造。 'valarray'用「隱式」類來完成所有這些(以及更多)。這個語法對我來說似乎更直接。 – towi

2

一些細心的谷歌搜索指出我issue 798,他們只移動13.5.5 [over.sub],不刪除它。

相關問題