【问题标题】:How to initialize anonymous structures in class constructor?如何在类构造函数中初始化匿名结构?
【发布时间】:2020-09-14 06:30:22
【问题描述】:

如何初始化匿名结构?

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

【问题讨论】:

    标签: c++ struct initialization anonymous-types


    【解决方案1】:

    您必须初始化整个对象,而不是数据成员的子对象。这不仅仅是匿名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
    {
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多