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

用 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 位小数,得组合使用流操纵器:
#include <iomanip> std::cout <p>注意:<code>std::fixed</code> 和 <code>std::setprecision</code> 是“粘性”的——设了一次,后续所有浮点输出都会沿用,直到你改掉它。</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2823" title="C++14"><img src="https://img.php.cn/upload/manual/001/431/639/6ac8b33c327c4749.png" alt="C++14" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="overflowclass">C++14</a> <p class="overflowclass">C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。</p> </div> <a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <ul> <li> <code>std::setprecision(n)</code> 在 <code>std::fixed</code> 下表示小数点后 n 位;没开 <code>std::fixed</code> 时,表示总共最多 n 位有效数字</li> <li>如果只临时改一次,记得之后用 <code>std::defaultfloat</code> 恢复默认浮点行为</li> <li> <code>std::setw</code> 控制字段宽度,但只对紧随其后的单个输出项生效,不会自动补零或对齐多个变量</li> </ul> <h3>遇到中文乱码或符号错位,先查终端和源码编码</h3> <p>不是 C++ 的问题,而是环境链路断了:源文件保存编码、编译器读取方式、终端渲染能力三者不一致,就会出现方块、问号或错行。</p> <ul> <li>VS Code / CLion 默认存 UTF-8,但 Windows 的 CMD 默认是 GBK,所以直接运行会乱码;推荐改用 Windows Terminal 或在 CMD 中执行 <code>chcp 65001</code> 切到 UTF-8</li> <li>Linux/macOS 终端一般默认 UTF-8,但若用 <code>g++</code> 编译,无需额外选项;Clang 可能需要 <code>-finput-charset=UTF-8</code>(极少需要)</li> <li>别用 <code>std::wcout</code> + <code>std::wstring</code> 试图“更高级地”解决中文——它反而更容易因 locale 未设置而完全不输出</li> </ul> <h3>想一行写完复杂组合?别硬拼,分步更稳</h3> <p>有人试图把所有东西塞进一个 <code>std::cout</code> 行里,比如带条件、计算、转义的混合输出,结果逻辑混乱、调试困难、还容易漏 <code>。</code></p> <p>真实项目中,更可靠的做法是拆开:</p> <pre class="brush:php;toolbar:false;">std::cout
- 每行职责清晰,出错时能快速定位哪段没执行
- 避免在单行中混用
std::endl和\n,统一用\n更轻量 - 如果真要构建完整字符串再输出(比如日志拼接),用
std::ostringstream,而不是反复调用std::cout
实际写的时候,最常被忽略的是流状态残留——比如上一次输出失败(如磁盘满导致 std::cerr 写入失败)会让后续所有 std::cout 失效,但程序不报错。检查 std::cout.fail() 很少做,但关键场景下值得加一句。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










