本文共 1942 字,大约阅读时间需要 6 分钟。
在C++中,endl
是std::ostream
的操作符,用于在输出时添加换行符并刷新缓冲区。以下是对endl
及其相关操作符的详细解析:
endl
操作符的实现endl
属于std::ostream
的操作符,主要用于在输出时添加换行符。其实现如下:
templateinline basic_ostream<_chart, _Traits>& endl(basic_ostream<_chart, _Traits>& __os) { return flush(__os.put(__os.widen('\n')));}
'\n'
添加到流的缓冲区,并调用flush
函数刷新缓冲区,确保内容立即输出到外部设备。<<
操作符的关联:通过std::ostream
的运算符重载,<<
操作符将endl
函数作为一个操作对象传递,实现换行功能。endl
有几个亲兄弟操作符,包括ends
、flush
和其他格式化操作符。以下是对这些操作符的简要说明:
ends
:输出一个空字符。flush
:刷新缓冲区,确保所有数据输出到外部设备。格式化操作符用于对输出数据进行格式化处理,常见的有:
这些操作符直接修改流的输出格式,常见的包括:
boolalpha
:输出true
和false
。showbase
:显示数字的进制前缀。setw
:设置输出宽度。这些操作符接受参数来修改流的输出行为,常见的包括:
setbase
:设置输出的进制(如十六进制)。setw
:设置输出的宽度。setfill
:设置对齐时的填充字符。通过示例可以更好地理解这些操作符的使用:
#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
使用如put_money
、get_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/