如何强制编译器使用聚合初始化而不是构造函数
How do I force compiler to use aggregate init instead of constructor
考虑以下示例:
#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
?
此时我使用单独的方法直接初始化文件,如:
struct Test
{
...
static Test NewTest(int x, int y)
{
Test ret;
ret.a = x;
ret.b = y;
return ret;
}
}
但我想知道是否有更好的方法来做到这一点。
Is it possible to force compiler to aggregate initialize v
so that output would be 1 1
?
一种方法是完全删除构造函数。
struct Test
{
int a, b;
};
聚合初始化要求类型为聚合。拥有用户声明的构造函数会使类型成为非聚合类型,因此这是不可能的。如果您删除构造函数,那么您的类型将变成聚合,并且聚合初始化将发生。
考虑以下示例:
#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
?
此时我使用单独的方法直接初始化文件,如:
struct Test
{
...
static Test NewTest(int x, int y)
{
Test ret;
ret.a = x;
ret.b = y;
return ret;
}
}
但我想知道是否有更好的方法来做到这一点。
Is it possible to force compiler to aggregate initialize
v
so that output would be1 1
?
一种方法是完全删除构造函数。
struct Test
{
int a, b;
};
聚合初始化要求类型为聚合。拥有用户声明的构造函数会使类型成为非聚合类型,因此这是不可能的。如果您删除构造函数,那么您的类型将变成聚合,并且聚合初始化将发生。