转换运算符中的分段错误(对成员的引用)

时间:2017-03-31 04:18:11

标签: c++ reference type-conversion

为什么会导致分段错误?

#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在进行转换时仍然活着。

http://coliru.stacked-crooked.com/a/e7453471bc1af93e

2 个答案:

答案 0 :(得分:1)

刚编辑了代码,它对我有用:

return std::string(a) == std::string(b);

答案 1 :(得分:1)

您对operator==进行了递归通话。 A的构造函数定义了stringA的隐式强制转换。要不允许,请将explicit添加到构造函数中,但是您缺少operator==字符串和A;