如何选择 C++ 中的运算符重载?

How to choose which operator overload in C++?

我正在学习 C++ 并创建一个简单的 class、tstring,定义为:

因此,这个class由静态部分(nntotalp)和动态部分(数据本身)组成。

我创建了三个构造函数:

我希望能够将一个 tstring 对象与一个 C 字符串连接起来,例如使用说明:

tstring x("Hello), y;
y = x + " World";

我认为我应该重载 + 运算符。但是我不明白我应该使用哪种方式在内部方式之间重载它:

tstring tstring::operator+(char string[])

或外部方式(使用 setter 和 getter 方法)

tstring operator+ (const tstring& myTstring, const char* string)

谁能给我解释一下区别和最好的领养方式?

提前致谢!

在这种情况下,您可能应该首先考虑两个 tstring 的连接。有了这个,您可以决定让 tstring(const char *) 构造函数为您处理转换。这样你就可以免费获得与 C 字符串的连接。

然后您会注意到 tstring + char [] 不会产生与 char [] + tstring 相同的结果。那是因为 first 将调用您的转换构造函数,而 second 将找不到任何匹配的运算符。

由于不对称 operator+ 是违反直觉的,您还应该提供非成员 operator+(const char *, tstring const &) 将其参数转发给它的 in-class 兄弟。