class Test {
public:
operator string() {
return string{"TEST!"};
}
};
int main() {
cout << Test{};
}
我期待 Test 对象将被隐式转换为字符串并输出,但它给了我错误:
error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
这种显式转换有效:
cout << string{Test{}};
我通过转换为const char*
:
class Test {
public:
operator const char*() {
return "TEST!";
}
};
然后输出:
cout << Test{}; //Yay it works.
我假设cout << string
已经是从string
to的隐式转换char *
,如果我使用强制转换为字符串,它将不会从Test to string to char *
. 直接转换为 后const char*
,它可以工作。(假设有误请指正)
证明假设是正确的
class Test {
public:
operator string() {
return string{"TEST!"};
}
};
ostream& operator<< (ostream& os, string s){
os << s;
return os;
}
这将从Test to string
和输出字符串执行直接类型推导。在我尝试之后,它起作用了!
cout << Test{}; //YAY WORKS! OUTPUT "TEST!"
有一些特别之处cout << string
由 解释Borgleader
。假设部分正确,部分错误。