这个问题在这里已有答案:
我假装写一个可以作为变体类型的类。一切都运行正常,但是当我尝试分配一个字符串时,被调用的方法是以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&
参考。