我有:
struct DisplayConfig {
int width;
int height;
int colorDepth;
};
另一个合计:
struct DisplayResolution {
int width;
int height;
};
我希望我们喜欢他们:
DisplayResolution resolution{1920, 1080};
DisplayConfig config{r, 32};
哪个不起作用。
将
DisplayConfig
更改为:struct DisplayConfig {
DisplayResolution resolution;
int colorDepth;
};
可以,但是不能更改
DisplayConfig
,也不能再访问config.width
。DisplayConfig{r.width, r.height, 32};
确实可行,但正税类似于:DisplayConfig config{r, 32};
可能?
最佳答案
不,根据您的条件,这是不可能的:“不能更改DisplayConfig
”。DisplayConfig
类确实满足了聚合的条件(在C++ 14中),因为它没有用户提供的构造函数,没有私有(private)或 protected 非静态数据成员,没有基类,也没有虚函数。
当通过初始化列表初始化此类聚合时,适用以下条件:
因此,在以下语句中:
DisplayConfig config{r, 32};
r
被用作DisplayConfig
的width
的第一个成员的初始化程序。由于转换失败,这将导致错误:error: cannot convert 'DisplayResolution' to 'int' in initialization
DisplayConfig config{ r, 32 };
^
和警告,因为没有给initt初始化器
depth
类的DisplayConfig
成员:warning: missing initializer for member 'DisplayConfig::colorDepth' [-Wmissing-field-initializers]
关于c++ - 用另一个聚合对象初始化聚合列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55060695/