C++ C++;运算符重载不可能与**

C++ C++;运算符重载不可能与**,c++,operator-overloading,C++,Operator Overloading,假设我有一个名为Complex的类,为什么允许我定义以下函数: Complex operator+(Complex& c1, Complex& c2); 但我不会写: Complex operator**(Complex& c1, Complex& c2);//for power 从中,您可以看到哪些运算符可以重载。您会注意到,**不是要重载的有效运算符之一。但是,您可以使用^运算符(尽管它通常表示按位) 如注释中所提到的,不能用这种方式创建新的运算符,因此不

假设我有一个名为Complex的类,为什么允许我定义以下函数:

Complex operator+(Complex& c1, Complex& c2);
但我不会写:

Complex operator**(Complex& c1, Complex& c2);//for power
从中,您可以看到哪些运算符可以重载。您会注意到,
**
不是要重载的有效运算符之一。但是,您可以使用
^
运算符(尽管它通常表示按位)


如注释中所提到的,不能用这种方式创建新的运算符,因此不能为<代码> **/COD> < /P> < P> <代码> *> /COD>本身不是一个有效的C++运算符,它只是两个没有空白的<代码> */Cuth>运算符。我们不能在C++中创建新的运算符,但是<代码>运算符*/COD>可以作为一元或二元运算符重载。代码>运算符*可以实现为非成员函数、成员函数或朋友函数,具体取决于类结构。下面是一个作为二进制非成员函数实现的

运算符*
示例,它返回一个新的
示例
对象

struct示例{
int x;
};
示例运算符*(示例a、常量示例和b){
返回a*=b;
}

<代码> > C++中没有<代码> **/COD>操作符。C++允许你重载运算符,而不是创建新的运算符。在C++中有39个运算符可以重载,而<>代码> *>代码不是其中之一。你必须选择其中的一个。你可以考虑<代码> ^ 而不是<代码> *> /代码>(虽然实际上是按位XOR)。