我知道这很愚蠢,但我会自动迁移一些代码。我的源语言允许字符串和整数之间的隐式转换,例如,这是允许的:
var = "hello " + 2
print(var) # prints "hello 2"
我如何在C ++中重载const char*
和int
的+运算符?我收到了错误:
错误:'std :: string operator +(char * const&,int)'必须有 类或枚举类型的参数
答案 0 :(得分:10)
要合法地使操作符过载,至少有一个操作数必须是用户定义的类型。由于char*
和int
都不是用户定义的,因此您尝试完成的工作是不可能的。
您正在尝试做的事情是标准中有意且明确地禁止的。如果突然1+3 = 42
因为有人"聪明的"},你认为这会很奇怪。已定义operator+(int, int)
的重载?
13.3.1.2p1-2
表达式中的运算符[over.match.oper]
如果表达式中的运算符的操作数没有类型或枚举类型,则假定运算符是内置运算符,并根据第5章进行解释。
如果任一操作数的类型是类或枚举,则可以声明用户定义的操作符函数来实现此操作符,或者可以将操作数转换为适合的操作数类型的用户定义的转换。内置的操作员。
(注意: C ++ 03 中的措辞与标准的下一版本相同; C ++ 14 )