【发布时间】:2014-07-28 02:19:23
【问题描述】:
我知道这既愚蠢又丑陋,但我正在自动迁移一些代码。我的源语言允许字符串和整数之间的隐式转换,例如这是允许的:
var = "hello " + 2
print(var) # prints "hello 2"
如何在 C++ 中为 const char* 和 int 重载 + 运算符?我收到了错误:
错误:'std::string operator+(char* const&, int)' 必须有一个 类或枚举类型的参数
【问题讨论】:
-
您不能为内置类型重载运算符。
-
已经有一个内置的
+运算符用于指针+整数和整数+指针。"hello" + 2产生一个指向字符串中第一个'l'字符的指针。由于数组索引是根据指针算法定义的,因此允许您隐藏预定义的运算符将非常糟糕。 -
"hello " + std::to_string(2)没什么特别的问题。 -
您是否正在从 VB6 迁移到 C++ 并试图保留该代码?不是一个好主意。
-
@vz0 不要,不要,我再说一遍不要超载
operator+(std::string, int)。仅重载您拥有的类型的运算符,并且您不拥有std中的类型。如果您必须有一个支持+ int的string类型,请创建自己的具有std::string字段的类型。
标签: c++ c++11 vb6-migration