【发布时间】:2011-07-18 14:41:06
【问题描述】:
我刚刚注意到,在 N3291 中标记了一个更改(5.2.1 下标 [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})
现在已删除并替换为:
花括号初始化列表不得与内置下标运算符一起使用。
出了什么问题?
【问题讨论】:
-
我看到
x[{1,2,3}]的第一反应是“嗯,这……”。也许这就是原因。这基本上创建了一个operator[],它具有不寻常的语法和一些未知数量的参数(operator[]采用 1、2、3 或 755 个索引在概念上是否有意义?)。而且,它只会让你感到困惑:P -
不,我刚刚找到它:open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3236.html#798 -- 他们只是把它搬走了,因为它是一个奇怪的地方。
标签: arrays c++11 curly-braces initializer-list