一般不直接通过ostream
类构造对象,而是使用其派生类 basic_ostream
:
-
cout
标准输出 -
具有有限缓冲的
cerr
标准错误 -
clog
类似于cerr
,但具有完全缓冲
#include <iostream>
int main() {
int a = 10;
int b = 0;
if (b == 0) {
std::cerr << "除数不能为零!" << std::endl;
} else {
std::cout << "a/b 的结果是:" << a / b << std::endl;
}
std::clog << "这是一条日志信息。" << std::endl;
return 0;
}
除了基础操作符 "<<" 外,basic_ostream还提供了
一些额外的api用于自定义输出格式:
示例:
输出流默认为右对齐的文本,若想使用左对齐可以使用setiosflags
操控器和 left
枚举器设置左对齐标志。 此枚举器在 ios 类中定义,因此它的引用必须包括 ios::
前缀。resetiosflags
操控器关闭左对齐标志。 与 width
不同,setiosflags
和 resetiosflags
的效果是永久性的
#include <iostream>
using namespace std;
int main( )
{
double values[] = { 1.23, 35.36, 653.7, 4358.24 };
for (int i = 0; i <4; i++)
{
cout.width(10); //指定输出宽度为10
cout.fill('*'); //空白部分使用*号填充
//<< setiosflags(ios::left)//左对齐
cout << values[i] << endl;
}
return 0;
}
/* 输出
******1.23
*****35.36
*****653.7
***4358.24
*/
basic_ostream
常见api
API 名称 | 描述 |
---|---|
operator<< | 用于输出各种类型的数据,可以重载以支持不同的数据类型。如输出整数、浮点数、字符串等。 |
put(char c) | 输出一个字符。 |
write(const char* s, std::streamsize n) | 输出指定数量的字符。 |
flush() | 刷新输出缓冲区,立即输出所有未写入的数据。 |
setf(std::ios_base::fmtflags mask) | 设置输出流的格式标志。例如设置十六进制输出、左对齐等。 |
unsetf(std::ios_base::fmtflags mask) | 清除输出流的格式标志。 |
width(int w) | 设置下一个输出项的最小宽度。如果输出项小于这个宽度,会进行填充。 |
precision(int p) | 设置浮点数输出的精度。 |
fill(char c) | 设置用于填充输出的字符。 |
good() | 判断流是否处于良好状态,即没有发生错误。 |
fail() | 判断流是否发生了输入 / 输出错误,但可能不是严重错误。 |
bad() | 判断流是否发生了严重错误。 |
eof() | 判断是否到达输入流的末尾(对于输出流一般较少使用)。 |