C++ 有关经营者的澄清

C++ 有关经营者的澄清,c++,class,operators,C++,Class,Operators,我一直在阅读有关类运算符的内容,遇到了以下示例: class Array { public: int& operator[] (unsigned i) { if (i > 99) error(); return data[i]; } private: int data[100]; }; 这是否意味着我可以用我想要的任何东西替换[和]?例如,我可以使用括号吗 另外,在int&operator[]中,符号AND的意义是什么 稍微不那么重要的一点是,使用int&o

我一直在阅读有关类运算符的内容,遇到了以下示例:

class Array {
public:
     int& operator[] (unsigned i) { if (i > 99) error(); return data[i]; }
private:
     int data[100];
};
这是否意味着我可以用我想要的任何东西替换
[
]
?例如,我可以使用括号吗

另外,在
int&operator[]
中,符号AND的意义是什么


稍微不那么重要的一点是,使用
int&operator[]
而不是
int&operator[]
在语法上是否正确

这是否意味着我可以用我想要的任何东西来取代[和]

不!不是所有的运营商

例如,我可以使用括号吗

你可以,但你不应该

另外,在
int&operator[]
中,符号AND的意义是什么

这意味着您将返回一个
int
变量

编辑:在一个稍微不太重要的注释上,使用
int&operator[]
而不是
int&operator[]
在语法上是否正确


两者之间没有区别。

可以使用括号,因为还有一个

operator()
一些库(例如boost::blas)就是这样做的。但是:由于没有
运算符{}
运算符


您的语法问题:没有尝试过,但不要这样认为,因为
操作符[]
是函数名,您不应该在函数名中添加空格。

虽然您可以根据自己的喜好定义操作符,但parens将是一个问题。原因是与类构造函数冲突!数组(25),它是什么意思?我不确定这是否被允许(尽管我很肯定其他人会知道),但问题是,即使你被允许,你也会有这样做的问题

一般来说-可以重载/重新定义用作运算符的符号。您可以指定类的==、&、>和[]工作方式。你不能确定字母“q”现在意味着某种类型的比较。至于()问题,我不确定

引用标记&是索引所必需的,因为您可能希望对返回的地址进行赋值,而不仅仅是获取一个值。如果你允许Lax描述,你的运算符的“多数”将不需要这个。

< P> <强> 1)没有,C++中有一组固定的“可重载”运算符。< /强> BR> 请参阅维基百科中的此表:

每个表中都有一个“重载”列

2)
int&
表示您正在返回对该值的引用。

类似于指针,值得自己讨论,但对于这里的运算符,如果您将此运算符用作赋值的左操作数,它允许什么

x[3] = 0;

如果它只返回一个int,这将不起作用;

您要做的是定义一个封装简单整数数组的数组类运算符,可以将数组的每个元素与任何其他数组一样,这里的优点是检查上限,避免缓冲区溢出。该方法意味着返回数组元素的引用,它允许你同时赋值并获得值。C++中,当你超载[]操作员不要忘记常量和非常量版本:

int& operator[] (conts int a) {...}
int operator[] (conts int a) {...} const

我明白了。当我的对象是被复制的对象时,如何定义
=
操作符的行为?@Maxpm:Read and。