写过 C 的人。
大概率都用过这种初始化。
.x = 1。
.y = 2。
它很舒服。
因为你不用猜顺序。
当年:C++ 的聚合初始化全靠顺序
C++ 里你也可以用花括号。
struct Config {
int port;
int timeout_ms;
bool verbose;
};
Config c{8080, 1000, false};
它能用。
但它很危险。
你只要字段一多。
你就开始对着定义数逗号。
线上啪一下:我把 timeout 和 port 填反了
这种事故很现实。
你一眼看不出。
{1000, 8080, false} 到底是什么意思。
而你上线后。
服务突然监听在 1000 端口。
你排查半天。
才发现是初始化顺序写错。
C++20:指定初始化
你可以像 C 一样。
按名字写。
Config c{
.port = 8080,
.timeout_ms = 1000,
.verbose = false,
};
你不用再背顺序。
你也不用担心“插入一个新字段”把所有初始化都搞乱。
你刚学 C++ 可能会卡:它是不是和 C 完全一样
不完全一样。
C++20 对它更保守。
比如要求字段顺序不能乱跳。
你可以当成。
“把 C 那个好用的语法移植过来,但加了点约束”。
关键结论
配置对象。
用名字初始化。
比用位置初始化更抗事故。
小结
指定初始化很朴素。
但它救过的夜班。
可能比你想象的多。