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

时间:2016-11-16 09:57:15

标签: c++ operator-overloading

我试图将转换运算符的类设置为string和char *,这会在尝试创建字符串时产生不明确的调用错误。 假设我有以下课程:

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

以及以下主要计划:

int main()
{
A a;
string b = string(a);
return 0;
}

这会导致对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;
}

导致同样的错误。我需要在我的代码中包含两个运算符,我该怎么做 让这个工作?

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

注意2:不使用显式键操作使operator = ambiguous

1 个答案:

答案 0 :(得分: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;
}