想要分配 std::string 但编译器认为是 bool

Want to assing std::string but compiler thinks is bool

我假装写一个 class 可以作为变体类型。 一切正常,但是当我尝试分配一个字符串时,调用的方法是将 bool 作为参数的方法:

class value_t {
public:
    value_t operator=(const int& integer) {
        std::cout<<"integer"<<std::endl;
        return *this;
    };
    value_t operator=(const std::string& str) {
        std::cout<<"string"<<std::endl;
        return *this;
    };
    value_t operator=(const bool& boolean) {
        std::cout<<"boolean"<<std::endl;
        return *this;
    };

};

value_t val;
val = "Hola mundo";

输出为:

boolean

为什么不调用字符串赋值运算符方法?

谢谢

"Hola mundo" 这样的字符串文字是 const char [],它会衰减到 const char *

语言标准定义了从任何指针到 bool 的隐式转换。

编译器选择 bool 运算符是更好的选择,因为调用 std::string 运算符需要编译器构造临时 std::string 对象,而调用 bool 运营商没有。

要执行您想要的操作,请为 const char * 添加另一个运算符,以便编译器根本不需要转换(如果需要,它可以选择调用 std::string 运算符):

value_t operator=(const char* str) {
    std::cout << "char*" << std::endl;
    return *this;
};

value_t operator=(const char* str) {
    return operator=(std::string(str));
};

否则,你必须显式地传入一个std::string

val = std::string("Hola mundo");

附带说明一下,您的运算符应该返回 value_t& 引用。