c++运算符字符串和char *导致歧义错误

标签 c++ operator-overloading

我正在尝试创建一个带有字符串和 char* 转换运算符的类,这会在尝试创建字符串时产生模糊调用错误。 假设我有以下类(class):

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;
}

这导致了同样的错误。我需要在我的代码中同时使用这两个运算符,我怎么能 让这个工作?

注意:使用 string b = a 可以,但我需要 string(a) 格式才能正常工作

注意 2:不使用显式键会使 operator= 不明确

最佳答案

你需要让它们都显式并使用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;
}

关于c++运算符字符串和char *导致歧义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40629001/

相关文章:

c++ - 使用 bcrypt 哈希密码进行身份验证

c++ - Windows Phone 8 应用仅在从商店下载后崩溃

c++ - 从 CSV 文件读取数据后将 string 转换为 int

c++ - 运算符重载的基本规则和惯用法是什么?

c++ - 在结构之外重载运算符

c++ 帮助读取 stdin 和 stdout 。还有运算符重载

c# - OR(|)、XOR(^)、AND(&) 重载

c++ - 使用 Boost asio 的实时串行 I/O

计算行驶里程和 MPH 的 C++ 程序

c++ - operator <= 重载 2 个类并转换 ctor