Как инициализировать анонимные структуры в конструкторе класса?

#c #struct #initialization #anonymous-types

#c #структура #инициализация #анонимные типы

Вопрос:

Как я мог бы инициализировать анонимные структуры?

 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
  

Ответ №1:

Вы должны инициализировать весь объект, а не подобъекты элемента данных. Это не только специально для анонимных struct . Например.

 A() : m_var{1, 0} // m_var.var_1 and m_var.var_2 are initialized as 1 and 0
{
}
  

И начиная с C 20 мы можем использовать назначенные инициализаторы для указания элемента данных struct при инициализации. Например.

 A() : m_var{.var_1=1, .var_2=0} // same effect as above
{
}
  

Комментарии:

1. Также стоит упомянуть о наличии назначенных инициализаторов , которые больше похожи на то, что пытался сделать OP.