为什么会导致分段错误?
#include <iostream>
struct A
{
std::string str;
A(std::string const& pstr) : str(pstr)
{}
operator std::string const&() const { return str; }
};
bool operator==(A const& a, A const& b)
{ return std::string(a) == b; }
int main()
{
A a1("hola"), a2("adios");
std::cout << (a1 == a2) << std::endl;
return 0;
}
毕竟,成员str
在进行转换时仍然活着。
答案 0 :(得分:1)
刚编辑了代码,它对我有用:
return std::string(a) == std::string(b);
答案 1 :(得分:1)
您对operator==
进行了递归通话。 A
的构造函数定义了string
到A
的隐式强制转换。要不允许,请将explicit
添加到构造函数中,但是您缺少operator==
字符串和A;