C++ [over.sub]/1中示例中使用的下标运算符的含义是什么?

C++ [over.sub]/1中示例中使用的下标运算符的含义是什么?,c++,operator-overloading,language-lawyer,C++,Operator Overloading,Language Lawyer,例如: struct X { Z operator[](std::initializer_list<int>); }; X x; x[{1,2,3}] = 7; // OK: meaning x.operator[]({1,2,3}) int a[10]; a[{1,2,3}] = 7; // error: built-in subscript operator struct X{ Z运算符[](标准::初始值设定项_列表); }; X; x[{1,2,3}]=7;//OK

例如:

struct X {
    Z operator[](std::initializer_list<int>);
};
X x;
x[{1,2,3}] = 7; // OK: meaning x.operator[]({1,2,3})
int a[10];
a[{1,2,3}] = 7; // error: built-in subscript operator
struct X{
Z运算符[](标准::初始值设定项_列表);
};
X;
x[{1,2,3}]=7;//OK:表示x运算符[]({1,2,3})
INTA[10];
a[{1,2,3}]=7;//错误:内置下标运算符
操作员[]声明中的
Z
是什么?
表达式
x[{1,2,3}]=7的可能含义是什么

运算符[]声明中的
Z
是什么

它是函数的返回类型。示例中根本没有使用它,因此没有理由将它实际定义为某个东西,我只是在那里显示函数返回某个东西。也许他们应该这样做,但实际上并不需要

表达式
x[{1,2,3}]=7的可能含义是什么

我相信这表明,您实际上可以传递多个值,但仍然可以将其作为一个参数进行计算,因为运算符定义为

[…]只有一个参数[…]


由于整个
初始值设定项\u列表
是实际参数,因此它允许您传递许多值。这可能是为N维矩阵编写运算符索引的一种方法。您可以使用一个
初始值设定项列表来重载
运算符[]
,其中每个值都是对应维度的索引。

无论您定义它是什么。这是一个用户定义的操作符?当然不是最好的例子,但是假设有一个
structz{void操作符=(int);}在那前面?否则,它意味着什么并不重要——关键是要证明您可以为类类型使用用户定义的
操作符[]
X
显然是一种类似多维数组的东西,而
Z
是它所包含的元素类型。