发布于2026-07-08 阅读(0)
扫一扫,手机访问
**为什么 `std::is_aggregate` 返回 false,但类型还能用花括号初始化?**
为什么?因为根本是两码事。花括号初始化在 C++ 里其实走的是好几条不同的路径,而“聚合初始化”只是其中一条。
`std::is_aggregate` 非常严格:它要求类型没有用户声明的构造函数、没有私有或受保护的非静态数据成员、没有虚函数、没有虚基类(C++17 起允许非虚基类,但基类自身也必须是聚合)。只有满足所有这些条件,它才返回 `true`。
但“能用花括号初始化”宽泛多了。只要类型提供了一个接受 `std::initializer_list` 的构造函数,或者有匹配参数列表的普通构造函数,`T x{...}` 照样合法——只不过这时候走的不是“聚合初始化”,而是“直接初始化”或者“initializer_list 构造函数”路径。
拿 `std::vector
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8