博客
关于我
c++中endl操作符以及它的兄弟们
阅读量:370 次
发布时间:2019-03-05

本文共 1942 字,大约阅读时间需要 6 分钟。

在C++中,endlstd::ostream的操作符,用于在输出时添加换行符并刷新缓冲区。以下是对endl及其相关操作符的详细解析:

1. endl操作符的实现

endl属于std::ostream的操作符,主要用于在输出时添加换行符。其实现如下:

template
inline basic_ostream<_chart, _Traits>& endl(basic_ostream<_chart, _Traits>& __os) { return flush(__os.put(__os.widen('\n')));}
  • 作用:将换行符'\n'添加到流的缓冲区,并调用flush函数刷新缓冲区,确保内容立即输出到外部设备。
  • <<操作符的关联:通过std::ostream的运算符重载,<<操作符将endl函数作为一个操作对象传递,实现换行功能。

2. 其他格式化操作符

endl有几个亲兄弟操作符,包括endsflush和其他格式化操作符。以下是对这些操作符的简要说明:

  • ends:输出一个空字符。
  • flush:刷新缓冲区,确保所有数据输出到外部设备。

3. 格式化操作符

格式化操作符用于对输出数据进行格式化处理,常见的有:

3.1 无参格式化操作符

这些操作符直接修改流的输出格式,常见的包括:

  • boolalpha:输出truefalse
  • showbase:显示数字的进制前缀。
  • setw:设置输出宽度。

3.2 有参格式化操作符

这些操作符接受参数来修改流的输出行为,常见的包括:

  • setbase:设置输出的进制(如十六进制)。
  • setw:设置输出的宽度。
  • setfill:设置对齐时的填充字符。

4. 实际应用示例

通过示例可以更好地理解这些操作符的使用:

#include 
#include
using namespace std;int main() { // 输出浮点数x以十六进制形式,字母大写 double x = 10.2333336; cout << uppercase << hexfloat << x << endl; // 设置输出宽度为12,输出y右对齐,中间填充空格 double y = -11.222; cout.width(12); cout << internal << y << endl; return 0;}

输出结果

0X1.47777806A1DABP+3-     11.222

5. 国际化和区域文化操作符

使用如put_moneyget_money等操作符可以处理国际化和区域文化相关的输出:

#include 
#include
#include
#include
using namespace std;void test01() { locale loc_de("en_US.utf-8"); cout.imbue(loc_de); // 输出货币字符串 string str = "720000000000"; cout << put_money(str) << endl; // 读取货币输入 string str2; cin.imbue(loc_de); cin >> get_money(str2); // 处理时间 time_t t; time(&t); tm *tmp = localtime(&t); cout << put_time(tmp, "%y %a") << endl; tm time1; istringstream iss("15:12:00 2021"); iss >> get_time(&time1, "%H:%M:%S %Y"); cout << "hour:" << time1.tm_hour << ',' << "min:" << time1.tm_min << ',' << "sec:" << time1.tm_sec << endl;}

输出结果

7,200,000,000.0012,00,0012000021 Thuhour:15,min:12,sec:0

这些操作符通过重载的operator<<实现,提供了灵活的输出控制,提升了程序的可读性和可维护性。

转载地址:http://iccwz.baihongyu.com/

你可能感兴趣的文章
Vue使用bus进行组件间、父子路由间通信
查看>>
数据库三个级别封锁协议
查看>>
函数与指针分析、回调函数
查看>>
类的实例
查看>>
tomcat加载部署webapps目录下的项目
查看>>
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
查看>>
方法重写
查看>>
Threading Programming Guide(多线程编程指南)
查看>>
Java求逆波兰表达式的结果(栈)
查看>>
SDWebImage--http图片加载不出来的问题
查看>>
Application received signal SIGSEGV
查看>>
MySQL删除数据库时的错误(errno: 39)
查看>>
Win10 JDK配置环境变量以及为什么需要配置每部分的原因
查看>>
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
查看>>
SLAM学习笔记-求解视觉SLAM问题
查看>>
target加载不出文件的原因之一
查看>>
普歌-允异团队-HashMap面试题
查看>>
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
查看>>
Windows下Python安装与使用
查看>>
Font Awesome图标库使用
查看>>