如何为const char*和int重载operator +

vz0*_*vz0 0 c++ vb6-migration c++11

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

var = "hello " + 2
print(var) # prints "hello 2"
Run Code Online (Sandbox Code Playgroud)

可我怎么在C++重载+运算符const char*int?我收到错误:

错误:'std :: string operator +(char*const&,int)'必须具有类或枚举类型的参数

Fil*_*efp 10

你所要求的是非法的

为了使运算符合法地过载,所涉及的操作数中的至少一个必须是用户定义的类型.既然既不是char*也不int用户定义的,那么你想要完成的是不可能的.

您正在尝试做的事情是标准中有意且明确地禁止的.难道你不觉得如果突然1+3 = 42因为某个"聪明"的人已经定义了一个过载而会很奇怪operator+(int, int)吗?


标准说什么?(n3337)

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

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

如果任一操作数具有类或枚举类型,则可以声明用户定义的运算符函数来实现此运算符,或者可以将操作数转换为适合于构建的类型的用户定义的转换.在运营商.

(注意:C++ 03和标准的下一版本中的措辞相同; C++ 14)