我正在查看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*()
以外的大部分内容,它究竟用于什么?
我对运算符重载有非常基本的了解,有人可以对此有所了解吗?
答案 0 :(得分:11)
它是对operator const char*()
成员函数的显式调用。这段代码也是这样的:
return strcmp(static_cast<const char*>(*this), (const char*)sString) == 0;
但该代码存在多个问题:
static_cast
)operator==
应该是免费功能,而不是会员功能operator const char*
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。