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)
但是这个代码有多个问题:
static_cast为正确的参数强制转换(例如)operator== 应该是一个自由函数,而不是一个成员函数operator const char*String合理地实现了类,operator==则应将两个参数作为const引用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()。