如何重载constchar*和int的运算符+
How to overload operator + for const char* and int
我知道这是愚蠢和丑陋的,但我正在自动迁移一些代码。我的源语言允许字符串和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(
相关文章:
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 运算符 += 应用于 std::valarray<int*>
- 我的运算符重载没有在我的 int main 中返回?
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 使用算术运算符时如何避免从 char 到 int 的隐式转换
- ostream_iterator运算符=在pair<int,int>上失败,但在包装器类上工作。我不能为成对<>重载运算符<<吗?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 赋值和添加运算符重载(2个表和int的串联)
- 没有运算符"=="与这些操作数匹配。操作数类型为:int == type_name'
- 运算符[]和运算符int()的不明确重载
- 二进制">>":未找到采用类型为"std::p air<int,int>"的右操作数的运算符
- 错误:运算符 [] 不匹配。在比较列表中的 int 和 int 时<int>,
- 如何在 std::map<const int、int> C++ 中重载插入运算符>>?
- 为什么我不能使用在 Visual C++ 32 位中实现运算符无符号 int() 作为数组索引的类?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- C++11 无符号字符在使用运算符 = 时变为 int
- 希望修复 main.cpp 与"std::istream&<< int&"运算符不匹配
- 虚拟int运算符()(int k);
- int 运算符 != 和 == 与零相比