c ++运算符字符串和char*导致模糊错误

sag*_*ibu 9 c++ operator-overloading

我正在尝试使用转换运算符创建一个类到字符串和char*,这在尝试创建字符串时会产生不明确的调用错误.假设我有以下课程:

class A
{
public:
A(){};
operator const char*() const { return "a" };
operator const string() const { return "b" };
}
Run Code Online (Sandbox Code Playgroud)

以及主要计划:

int main()
{
A a;
string b = string(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这导致对basic_string(A&)的模糊调用错误也尝试了以下内容:

class A
{
public:
A(){};
operator const char*() const { return "a" };
explicit operator const string() const { return "b" };
}

int main()
{
A a;
string b = static_cast<string>(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会导致同样的错误.我需要在我的代码中使用这两个运算符,我该如何使其工作?

注意:使用字符串b = a有效但我需要字符串(a)格式才能工作

注2:不使用显式键操作使operator =不明确

Sin*_*all 2

您需要同时制作它们explicit并使用static_cast

class A
{
public:
    A(){};
    explicit operator const char*() const { return "a"; };
    explicit operator const string() const { return "b"; };
};

int main()
{
    A a;
    string b = static_cast<string>(a); // works, b now has "b" as value
    const char * c = static_cast< const char *>(a); // works too, c now has "a" as value
    return 0;
}
Run Code Online (Sandbox Code Playgroud)