std::cout 支持链式插入操作,可直接拼接文字和变量,无需字符串拼接或格式化占位符,如 std::cout << "x=" << x << ", y=" << y;

用 std::cout 拼接文字和变量最直接
不用字符串拼接,也不用格式化占位符,std::cout 本身支持链式插入。它把每个 后面的内容按顺序输出,中间不加空格、不自动换行。
常见错误是误以为需要手动加空格或换行:std::cout 是对的,但写成 <code>std::cout 在频繁输出时可能影响性能(<code>std::endl 强制刷新缓冲区)。
- 变量类型必须能被
operator 重载支持,内置类型(<code>int、double、std::string)都行 - 自定义类要自己实现
operator 才能这么用 - 中文字符串需确保源文件编码为 UTF-8,且终端/控制台支持 UTF-8 显示
想控制格式(对齐、小数位)就得用 std::setprecision 和 std::fixed
默认浮点数输出是科学计数法或自动截断,比如 3.14159 可能只显示 3.14159 或 3.1416,取决于值大小和默认精度(通常是 6 位有效数字)。
要固定显示 2 位小数,得组合使用流操纵器:
立即学习“C++免费学习笔记(深入)”;
#include <iomanip> std::cout << "pi = " << std::fixed << std::setprecision(2) << 3.14159;
注意:std::fixed 和 std::setprecision 是“粘性”的——设了一次,后续所有浮点输出都会沿用,直到你改掉它。
-
std::setprecision(n)在std::fixed下表示小数点后 n 位;没开std::fixed时,表示总共最多 n 位有效数字 - 如果只临时改一次,记得之后用
std::defaultfloat恢复默认浮点行为 -
std::setw控制字段宽度,但只对紧随其后的单个输出项生效,不会自动补零或对齐多个变量
遇到中文乱码或符号错位,先查终端和源码编码
不是 C++ 的问题,而是环境链路断了:源文件保存编码、编译器读取方式、终端渲染能力三者不一致,就会出现方块、问号或错行。
- VS Code / CLion 默认存 UTF-8,但 Windows 的 CMD 默认是 GBK,所以直接运行会乱码;推荐改用 Windows Terminal 或在 CMD 中执行
chcp 65001切到 UTF-8 - Linux/macOS 终端一般默认 UTF-8,但若用
g++编译,无需额外选项;Clang 可能需要-finput-charset=UTF-8(极少需要) - 别用
std::wcout+std::wstring试图“更高级地”解决中文——它反而更容易因 locale 未设置而完全不输出
想一行写完复杂组合?别硬拼,分步更稳
有人试图把所有东西塞进一个 std::cout 行里,比如带条件、计算、转义的混合输出,结果逻辑混乱、调试困难、还容易漏 。
真实项目中,更可靠的做法是拆开:
std::cout << "Result: ";
if (valid) {
std::cout << value * scale << " (OK)";
} else {
std::cout << "N/A";
}
std::cout << "\n";- 每行职责清晰,出错时能快速定位哪段没执行
- 避免在单行中混用
std::endl和\n,统一用\n更轻量 - 如果真要构建完整字符串再输出(比如日志拼接),用
std::ostringstream,而不是反复调用std::cout
实际写的时候,最常被忽略的是流状态残留——比如上一次输出失败(如磁盘满导致 std::cerr 写入失败)会让后续所有 std::cout 失效,但程序不报错。检查 std::cout.fail() 很少做,但关键场景下值得加一句。


















