想要分配 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&
引用。
我假装写一个 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&
引用。