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

How does std::cout print a std::string?

本文关键字:std 打印 string 何打印 cout      更新时间:2023-10-16

std::basic_ostream是否有接受std::basic_string对象的重载operator <<?我正在阅读 cpp偏好,似乎没有列出一个。

假设您创建了自己的名为 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使用相同的方法,您可以在此处找到文档。

std 命名空间中定义了非成员运算符。请参阅 cpp 首选项。

如果你想打印你的class A的对象,你重载<< operator像这样:

ostream & operator << (ostream & os, A &a)
{
    os << a.data_member;
}

std namespace中以同样的方式,有一个重载运算符打印类 string 的对象。