如何解释运算符重载中的“operator const char *()”?

时间:2013-09-09 08:01:59

标签: c++ operator-overloading

我正在查看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 个答案:

答案 0 :(得分:11)

它是对operator const char*()成员函数的显式调用。这段代码也是这样的:

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

但该代码存在多个问题:

  1. 它不应该使用C-cast,而是C ++ - 为正确的参数强制转换(例如static_cast
  2. operator==应该是免费功能,而不是会员功能
  3. 字符串类通常不应具有operator const char*
  4. 如果String类合理地实现,operator==应该将两个参数作为const引用

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

此运算符会将其自己的String强制转换为const char*并调用strcmp。