【发布时间】:2021-05-16 16:59:05
【问题描述】:
我知道在 C++ 中如何定义重载运算符的类的方法,我想知道是否可以使用函数名定义函数(不是方法,甚至不是类的友元函数)。例如,operator==。
显然,这样的函数将接受两个相同类型的参数,并返回一个布尔值。
例如,我尝试定义这个愚蠢的函数:
char operator*(char C1, char C2){
return ';';
}
g++ 编译器的回答是:
错误:重载的 'operator*' 必须至少有一个类或枚举类型的参数
【问题讨论】:
-
"重载的 'operator*' 必须至少有一个类或枚举类型的参数" - 很清楚,不是吗?你明白编译器在告诉你什么吗?您不能为内置类型重载运算符。
-
是的,这是可能的,但是对于像
char这样的原始类型,你不能这样做。其中一个参数必须是class或struct或enum或(不确定)union。 -
创建一个包含单个字符的结构并使用该结构代替字符。
-
@Abel 如果该结构有一个采用 char 的构造函数,您甚至可能会获得隐式转换以对您有利。
-
和一个用于 char 的运算符以获取隐式转换。