#include <iostream>
struct Int {
int i;
operator int() const noexcept {return i;}
};
int main() {
Int i;
i.i = 1;
std::cout << i;
}
#include <iostream>
#include <string>
struct String {
std::string s;
operator std::string() const {return s;}
};
int main() {
String s;
s.s = "hi";
std::cout << s;
}
以下是错误的相关部分:
错误:'operator<<' 不匹配(操作数类型是 'std::ostream {aka std::basic_ostream}' 和 'String')
std::cout << s;剪断
模板 std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::basic_string<_CharT, _Traits, _Alloc>&)
operator<<(basic_ostream<_CharT , _Traits>& __os,/usr/include/c++/4.8/bits/basic_string.h:2753:5:注意:模板参数推导/替换失败:
main.cpp:25:18:注意:'String' 不是从 'const std:: 派生的basic_string<_CharT, _Traits, _Alloc>'<br> std::cout << s;
我只使用std::cout
and std::string
,它们具有相同的模板参数。我真的不确定为什么它不能像Int
. 为什么它可以工作int
,但不能std::string
?