std::basic_ostream
是否有operator <<
的重载接受std::basic_string
个对象?我正在阅读cppreference并且似乎没有列出一个。
答案 0 :(得分:4)
想象一下,您创建了一个名为Car
的自己的类,其中包含车牌号,引擎的型号/功率以及一堆其他信息。现在,想象一下,您希望提供将汽车信息打印到文件或屏幕中的好方法。
如果你想使用basic_ostream
重载,你没有运气,因为你的类没有定义过载。您可以提供print_into_ostream
方法或其他一些聪明的技巧,但您刚刚意识到std::string
也没有适当的重载,您仍然可以执行cout << myStr;
。快速搜索后,您会找到一个应用于std::string
的解决方案,您可以在类中使用它,如下所示:
class Car
{
std::string licence_plate, engine;
public:
// ... other here ...
friend ostream& operator<<(ostream& os, const Car& c);
};
ostream& operator<<(ostream& os, const Car& c)
{
os << c.licence_plate << "-" << c.engine;
return os;
}
现在你可以使用
了cout << myCarObject << endl;
与任何内置类型一样。
std::string
使用相同的方法,您可以找到文档here。
答案 1 :(得分:3)
std
命名空间中定义了非成员运算符。请参阅cppreference。
答案 2 :(得分:0)
如果您要打印class A
的对象,请按以下方式重载<< operator
:
ostream & operator << (ostream & os, A &a)
{
os << a.data_member;
}
在std namespace
中以相同的方式存在一个重载的运算符,它打印类string
的对象。