C++ 输出流
在C++编程中,输出流是向用户显示数据或将数据写入文件的重要机制。C++提供了一套完整的输出流系统,让开发者能够以一种一致且灵活的方式处理数据输出。
什么是输出流?
输出流是C++中的一个抽象概念,代表着数据从程序流向外部目标(如屏幕、文件或字符串)的通道。在C++标准库中,所有输出流类都派生自ostream
基类,提供了统一的接口和操作。
标准输出流
C++提供了几个预定义的标准输出流对象:
cout
- 标准输出(通常是屏幕)cerr
- 标准错误输出(无缓冲)clog
- 标准日志输出(带缓冲)
cout - 标准输出
cout
是最常用的输出流,用于在控制台显示信息:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
int number = 42;
std::cout << "The answer is: " << number << std::endl;
return 0;
}
输出:
Hello, World!
The answer is: 42
提示
std::endl
不仅插入换行符,还会刷新输出缓冲区。如果只需要换行而不需要刷新缓冲区,可以直接使用'\n'
,这样 在大量输出时可以提高性能。
cerr 和 clog - 错误和日志输出
这两个流专门用于输出错误信息和日志:
#include <iostream>
int main() {
std::cout << "Normal output" << std::endl;
std::cerr << "Error message" << std::endl;
std::clog << "Log message" << std::endl;
return 0;
}
cerr
是无缓冲的,意味着输出会立即显示,而不会等待缓冲区填满或刷新。这对于错误信息非常重要,因为即使程序崩溃,错误信息也能显示出来。
输出操作符和操纵符
插入操作符 <<
<<
是C++中的输出操作符(也称为插入操作符),它被重载用于不同类型的数据输出:
#include <iostream>
int main() {
int number = 10;
double pi = 3.14159;
std::string message = "C++ is fun";
std::cout << "Integer: " << number << std::endl;
std::cout << "Double: " << pi << std::endl;
std::cout << "String: " << message << std::endl;
return 0;
}
输出操纵符
操纵符是用于控制输出格式的特殊函数,如设置字段宽度、对齐方式、进制等。
#include <iostream>
#include <iomanip> // 必须包含此头文件使用大多数操纵符
int main() {
int number = 42;
// 设置宽度和填充
std::cout << std::setw(10) << std::setfill('*') << number << std::endl;
// 设置进制
std::cout << "十进制: " << std::dec << number << std::endl;
std::cout << "十六进制: " << std::hex << number << std::endl;
std::cout << "八进制: " << std::oct << number << std::endl;
// 设置精度
double value = 3.14159265359;
std::cout << "默认精度: " << value << std::endl;
std::cout << "精确到2位: " << std::fixed << std::setprecision(2) << value << std::endl;
return 0;
}
输出:
********42
十进制: 42
十六进制: 2a
八进制: 52
默认精度: 3.14159
精确到2位: 3.14