C++运算符重载无法使用 **

C++ operator overloading not possible with **

本文关键字:运算符 重载 C++      更新时间:2023-10-16

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

Complex operator+(Complex& c1, Complex& c2);

但我不能写:

Complex operator**(Complex& c1, Complex& c2);//for power

**本身不是一个有效的C++运算符,它只是两个没有空格的*运算符。我们不能在C++中创建新的运算符,但operator*可以作为一元或二元运算符重载。operator*可以实现为非成员函数、成员函数或友元函数,具体取决于类结构。下面是一个operator*作为二进制非成员函数实现的示例,该函数返回一个新的Example对象。

struct Example {
int x;
};
Example operator*(Example a, const Example& b){
return a *= b;
}

over.oper中,您可以看到哪些运算符可以重载。您会注意到**不是重载的有效运算符之一。但是,您可以使用^运算符(尽管它通常用于按位(

如注释中所述,您无法以这种方式创建新运算符,因此无法为**创建新运算符