C ++ 0x:为什么禁止“operator []”中的“braced-init-list”?

时间:2011-07-18 14:41:07

标签: arrays c++11 curly-braces initializer-list

我刚注意到,在N3291中标记了一个更改( 5.2.1 Subscripting [expr.sub] ):

之前,可以使用新的 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})

现在删除并替换

  

braced-init-list不能与内置的下标运算符一起使用。

问题是什么?

2 个答案:

答案 0 :(得分:9)

x[{1,2,3}]不是内置的[]运算符。它调用用户定义的操作符函数。所以深吸一口气,继续使用这个有趣的语法。

答案 1 :(得分:2)

一些小心的谷歌搜索指向issue 798,他们只移动到 13.5.5 [over.sub] ,而不是已删除 it。