std :: cout如何打印std :: string?

时间:2013-09-05 17:34:04

标签: c++

std::basic_ostream是否有operator <<的重载接受std::basic_string个对象?我正在阅读cppreference并且似​​乎没有列出一个。

3 个答案:

答案 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的对象。