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;
}
假设我有一个名为 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;
}