如何在类构造函数中初始化匿名结构?

问题描述

我如何初始化匿名结构?

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
{
}