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

zer*_*d0l 3 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; 
}
Run Code Online (Sandbox Code Playgroud)

除了operator const char*()它用于什么之外,我理解了大部分内容?我对运算符重载有非常基本的了解,有人可以请多说一点吗?

Arn*_*rtz 11

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

return strcmp(static_cast<const char*>(*this), (const char*)sString) == 0;
Run Code Online (Sandbox Code Playgroud)

但是这个代码有多个问题:

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

  • +1对于那些对#3的权证感到奇怪的人,[请参阅此问题](http://stackoverflow.com/questions/4096210/why-does-stdstring-not-provide-a-conversion-to-constchar ) (2认同)

jfl*_*fly 5

operator const char*()是旧式的 C 转换:就像您可以通过 (float)int_var 将整数转换为 float 一样,您可以转换为const char*as (const char*)string_var。这里它把一个字符串投射到const char *

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