[sub]操作符在[over.sub]/1示例中的含义是什么?

4

[over.sub]/1

Example:

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

operator[]声明中的Z是什么意思?
表达式x[{1,2,3}] = 7;的可能含义是什么?


5
你可以根据你的定义来确定它,这是一个用户定义的运算符吗? - DeiDei
诚然,这不是最好的例子,但假装在那之前有一个 struct Z { void operator=(int ); };?否则,它的含义并不重要 - 关键是展示您可以为类类型定义用户定义的 operator[] - Barry
更好的是,假装使用 using Z = int&; - Barry
X 显然是像多维数组一样的东西,而 Z 是它所持有元素的类型。 - Barmar
1个回答

4
在operator[]声明中,Z是什么意思?
它是函数的返回类型。在示例中没有使用它,因此没有理由实际定义为某个东西,它只是用来显示函数返回值的。也许他们应该这样做,但并不是真正必要的。
表达式x [{1,2,3}] = 7的可能含义是什么?
我认为它表明你实际上可以传递多个值,但仍然将其视为一个参数,因为运算符被定义为具有
[...]恰好一个参数[...]
由于整个initializer_list是实际参数,它允许您传递多个值。这可能是为N维矩阵编写索引操作符的一种方法。与其重载operator(),您可以使用initializer_list重载operator[],其中每个值都是相应维度的索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接