【发布时间】:2016-07-13 15:35:48
【问题描述】:
如果我将struct A 定义为:
struct A {
const char *data;
operator const char * () const { return data; }
friend bool operator== (const A &s1, const char *s2)
{ return /* typical string comparison result */; }
};
我写A{"hello"} == "test2",是A::operator== 调用吗?标准中的内容是什么(为什么A 没有隐式转换为const char *?)
"test2" == A{"hello"} 呢?在这种情况下A 是否转换?
编辑:如果struct A 也有成员怎么办:
friend bool operator== (const char *s1, const A &s2)
【问题讨论】:
-
只使用 std::string
-
@Davidbrcz 这个问题根本不是这个问题。
-
我认为
friend使函数非-成员(即全局)。 -
我编辑了标题,将“隐式转换”更改为“隐式转换”。没有隐式强制转换之类的东西。强制转换是显式转换运算符。
-
@Gill Bates,是的。使用
std::string将使他的原始请求无效,因为即使从A->std::string转换中选择operator==为std::strings,它也会完美地工作。在这里,对称性被打破,这是令人讨厌的错误来源,尤其是因为 2 个字符串文字可能具有或可能不具有相同的地址。它完全留给实现......经典的XY问题!
标签: c++ operator-overloading implicit-conversion overload-resolution