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

时间:2014-06-06 18:08:29

标签: c++ c++11 vb6-migration

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

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

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

  

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

1 个答案:

答案 0 :(得分:10)

你要求的是非法的

要合法地使操作符过载,至少有一个操作数必须是用户定义的类型。由于char*int都不是用户定义的,因此您尝试完成的工作是不可能的。

您正在尝试做的事情是标准中有意且明确地禁止的。如果突然1+3 = 42因为有人"聪明的"},你认为这会很奇怪。已定义operator+(int, int)的重载?


标准说什么? (n3337

  

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

     
    

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

         

如果任一操作数的类型是类或枚举,则可以声明用户定义的操作符函数来实现此操作符,或者可以将操作数转换为适合的操作数类型的用户定义的转换。内置的操作员。

  

注意 C ++ 03 中的措辞与标准的下一版本相同; C ++ 14