如何在 class 构造函数中初始化匿名结构?
How to initialize anonymous structures in class constructor?
如何初始化匿名结构?
class A
{
public:
A() : m_var.var_1(1)
{
}
private:
struct
{
int var_1;
int var_2;
}m_var;
};
上面的代码在我尝试编译时出现了这个错误:
main.cpp: In constructor ‘A::A()’:
main.cpp:6:16: error: expected ‘(’ before ‘.’ token
6 | A() : m_var.var_1(1)
| ^
| (
main.cpp:6:16: error: expected ‘{’ before ‘.’ token
您必须初始化整个对象,而不是数据成员的子对象。这不仅仅是匿名 struct
的特殊情况。例如
A() : m_var{1, 0} // m_var.var_1 and m_var.var_2 are initialized as 1 and 0
{
}
并且从 C++20 开始我们可以在初始化时使用 designated initializers 来指定 struct
的数据成员。例如
A() : m_var{.var_1=1, .var_2=0} // same effect as above
{
}
如何初始化匿名结构?
class A
{
public:
A() : m_var.var_1(1)
{
}
private:
struct
{
int var_1;
int var_2;
}m_var;
};
上面的代码在我尝试编译时出现了这个错误:
main.cpp: In constructor ‘A::A()’:
main.cpp:6:16: error: expected ‘(’ before ‘.’ token
6 | A() : m_var.var_1(1)
| ^
| (
main.cpp:6:16: error: expected ‘{’ before ‘.’ token
您必须初始化整个对象,而不是数据成员的子对象。这不仅仅是匿名 struct
的特殊情况。例如
A() : m_var{1, 0} // m_var.var_1 and m_var.var_2 are initialized as 1 and 0
{
}
并且从 C++20 开始我们可以在初始化时使用 designated initializers 来指定 struct
的数据成员。例如
A() : m_var{.var_1=1, .var_2=0} // same effect as above
{
}