考虑以下示例:
#include <iostream>
struct Test
{
int a, b;
Test(int, int)
{
a = b = 0;
}
};
int main() {
Test v {1, 1};
std::cout << v.a << ' ' << v.b << '\n';
return 0;
}
在此{1, 1}
调用Test(int, int)
构造函数,因此输出为0 0
。
是否可以强制编译器聚合初始化,v
以便输出是1 1
?
此时,我使用单独的方法直接初始化fileds,例如:
struct Test
{
...
static Test NewTest(int x, int y)
{
Test ret;
ret.a = x;
ret.b = y;
return ret;
}
}
但是我想知道是否有更好的方法可以做到这一点。
聚合初始化要求类型为聚合。使用用户声明的构造函数会使该类型成为非聚合类型,因此这是不可能的。如果删除构造函数,则您的类型将成为聚合,并且将发生聚合初始化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句