YAML流输出需自行实现,operator不提供内置支持。
YAML流输出必须自己实现,
operator 不能直接用
标准 C++ iostream 不认识 YAML 格式,
operator 对 std::ostream
重载后,也只是把原始数据“塞进去”,不会自动加缩进、引号、换行或转义。你看到的“YAML 输出”其实是你自己在重载函数里手动拼出来的字符串结构。
常见错误现象:
std::cout 看起来像 YAML,但字段顺序错乱、字符串没加引号、嵌套 map 没缩进、null
或
true
被输出成
0
/
1
—— 这些都不是流的问题,是你没处理 YAML 规范。
YAML 要求字符串含空格/冒号/井号时必须加双引号(如
"user name"
),单靠
operator 不会自动判断
map/set 容器需按 key 字典序输出(YAML spec 推荐),而
std::map
默认有序,
std::unordered_map
必须先转 vector 再排序
浮点数默认输出可能带多余精度(如
3.000000
),需用
std::setprecision
+
std::fixed
控制
别在重载里直接调用
std::endl
:它强制 flush,影响性能;用
'\n'
更安全
重载
operator 时必须传入缩进层级参数
YAML 是缩进敏感格式,嵌套对象(如 struct 里含 vector