std::cout 如何打印 std::string
How does std::cout print a std::string?
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
的对象。
相关文章:
- 如何使用 std::variant 打印地图键/值?
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 如何打印大于"无符号长长"的"std::bitset"的十进制值?
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- 重载 std::字符串运算符+ 用于打印枚举名称
- 在 c++ 中以十六进制格式打印无符号字符(BYTE).使用 std::cout
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- 为什么这个程序接受整数和字母数字输入并打印它们? C++ 中的 std::string 也采用整数值吗?
- std::cout 在打印变量与函数表达式时的行为不同
- 使用 std::for_each 迭代和打印 std::map
- 有条件的打印和计数在 std::map 上有限制
- 在瓦尔格林德的泄漏摘要中使用 std::ios::sync_with_stdio(fasle) 打印时获取"still reachable"
- 如何在c++中打印原始std::string/c样式的字符串
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- C++ - 使用 std::list,如何打印对象的私有成员的链接列表?
- 打印一个带有静态 int 的函数,有一个 std::cout 和多个 std::cout 有什么区别?
- 使用带有 std::cout 的单引号打印字符串实际上打印了数字
- Std::copy 和 std::ostream_iterator 使用重载函数打印值
- 为什么 std::hex 没有特别用字符打印为十六进制?
- std::打印换行时字符串清空