想要std :: string但是编译器认为是bool [重复]

问题描述 投票:0回答:1

我假装写一个可以作为变体类型的类。一切都运行正常,但是当我尝试分配一个字符串时,被调用的方法是以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

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

谢谢

c++ string methods std assign
1个回答
2
投票

"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&参考。

© www.soinside.com 2019 - 2024. All rights reserved.