5

我正在查看 String 类的实现之一,并注意到以下重载的 == 运算符。

String f = "something";
String g = "somethingelse";
if (f == g)
    cout << "Strings are equal." << endl;

bool operator==(String sString)
{
    return strcmp(operator const char*(), (const char*)sString) == 0; 
}

我理解了大部分内容,除了operator const char*()它到底是用来做什么的?我对运算符重载有非常基本的了解,有人可以对此进行更多说明吗?

4

4 回答 4

11

它是对operator const char*()成员函数的显式调用。此代码将执行相同的操作:

return strcmp(static_cast<const char*>(*this), (const char*)sString) == 0;

但是该代码存在不止一件事:

  1. 它不应该使用 C-cast,而是 C++-casts(例如static_cast)作为正确的参数
  2. operator==应该是自由函数,而不是成员函数
  3. 字符串类通常不应该有operator const char*
  4. 如果String类实现合理,operator==则应将两个参数都作为 const 引用
于 2013-09-09T08:08:44.360 回答
4

operator const char*()是老式的 C 转换:就像您可以将整数转换为 (float)int_var 浮动一样,您可以转换const char*为 as (const char*)string_var。在这里它将一个字符串转换为const char *

如果您熟悉 STL std::string,那么这与那里operator const char*()的工作基本相同.c_str()

于 2013-09-09T08:09:25.040 回答
1

这是对您的实现const char*重载的强制转换运算符的显式调用。String

于 2013-09-09T08:08:16.660 回答
0

该运算符将自己String转换为const char*并调用 strcmp。

于 2013-09-09T08:09:28.400 回答