繁体   English   中英

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

[英]How to overload operator + for const char* and int

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

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

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

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

您要的是违法的

为了合法地重载运算符,涉及的至少一个操作数必须是用户定义的类型 由于char*int都不是用户定义的 ,因此您无法完成的任务。

您正在尝试执行的操作在标准中是有意且明确地禁止的。 您是否不认为突然出现1+3 = 42会很奇怪,因为有人“聪明”地定义了operator+(int, int)的重载?


标准怎么说? n3337

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

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

如果任一操作数的类型为类或枚举,则可能会声明一个实现此操作符的用户定义的操作符函数,或者可能需要用户定义的转换才能将该操作数转换为适用于内置对象的类型。在运算符中。

注意C ++ 03和该标准的下一修订版; C ++ 14的措词相同)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM