C++ 运算符重载不可能用 **

C++ operator overloading not possible with **

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

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

但是我不会写:

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

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

如评论中所述,您无法通过这种方式创建新的运算符,因此您无法为 **

创建新的运算符

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

struct Example {
    int x;
};

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