один вопрос о синтаксисе c ++ (метод структуры) - PullRequest
4 голосов
/ 09 июня 2011

В следующем коде, что означает: next (next_par), info (info_par)?

struct list_node : public memory::SqlAlloc  
{ 
  list_node *next;  
  void *info;  
  list_node(void *info_par,list_node *next_par)  
    :next(next_par),info(info_par)   /* what's the meaning of :next(next_par),info(info_par)?*/
  {}  
  list_node()                    
  {  
    info= 0;  
    next= this;  
  }  
};  

выглядит так, как будто он хочет назначить info_par для info для info (info_par) и назначить next_parк следующему к следующему (next_par).Но я не видел определения next (), info ().

Ответы [ 4 ]

3 голосов
/ 09 июня 2011

:next(next_par),info(info_par) - список инициализации для переменных-членов.Вместо:

list_node(void *info_par,list_node *next_par){
    next = next_par;
    info = info_par;
}

РЕДАКТИРОВАТЬ: Как примечание, списки инициализации могут быть важны, если у вас есть переменные объекта-члена, которые должны быть созданы с помощью конструктора не по умолчанию.

1 голос
/ 09 июня 2011

Это список инициализации, который инициализирует значения переменных класса или структуры в списке. Эти переменные инициализируются перед выполнением фактического тела самого конструктора. Обычно это необязательно (хотя в любом случае это хорошая идея, поскольку оно создает известное состояние для любых переменных-членов перед выполнением тела конструктора), но это также необходимо, если вы пытаетесь инициализировать базовый класс или структуру без конструктора по умолчанию из производный класс или структура, поскольку базовый класс должен быть создан до производного класса.

Например:

struct base
{
    int a;
    base(int b): a(b) {}
};

struct derived: public base
{
    //we have to value-initialize the base-structure before the 
    //derived structure's construtor-body is executed
    derived(int c): base(c) {}
};
1 голос
/ 09 июня 2011

Это список инициализаторов, в котором вы можете инициализировать своих членов с помощью прямых вызовов одного из их конструкторов. В этом случае члены next и info инициализируются параметрами, отправленными в конструктор list_node.

1 голос
/ 09 июня 2011

Это список инициализации C ++. Это появляется только в конструкторах. Он используется для присвоения значений элементам данных создаваемого объекта. Дело в том, что как только конструктор начинает работать, все члены данных уже получают общеизвестные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...