如何重载constchar*和int的运算符+

How to overload operator + for const char* and int

本文关键字:int 运算符 constchar 何重载 重载      更新时间:2023-10-16

我知道这是愚蠢和丑陋的,但我正在自动迁移一些代码。我的源语言允许字符串和int之间的隐式转换,例如:

var = "hello " + 2
print(var) # prints "hello 2"

如何在C++中重载const char*int的+运算符?我得到错误:

错误:"std::string运算符+(char*const&,int("必须具有类或枚举类型的参数

您所要求的是非法的

要合法地重载运算符,至少涉及的一个操作数必须是用户定义的类型。由于char*int都不是用户定义的,因此您想要实现的目标是不可能的。

标准中有意且明确地禁止您尝试这样做。你不觉得如果突然1+3 = 42会很奇怪吗;聪明的";是否为operator+(int, int)定义了过载?


标准是怎么说的?(n3337(

表达式中的13.3.1.2p1-2运算符[over.match.oper]

如果表达式中运算符的操作数的类型不是类或枚举,则假定该运算符是内置运算符,并根据第5条进行解释。

如果任一操作数的类型是类或枚举,则可能会声明实现此运算符的用户定义运算符函数,或者可能需要进行用户定义转换才能将操作数转换为适合内置运算符的类型。

(注意C++03和标准的下一个修订版中的措辞相同;C++14(

相关文章: