Инициализация полей в классе C ++

0

Я видел следующий код в книге и задаюсь вопросом, что происходит:

class shiftedList{

      int* array;
      int offset, size;

public:       

         shiftedList(int sz) : offset(0), size(sz){
               array = new int[size];
        }        

}

что происходит со смещением (0) и размером (sz) в конструкторе класса?

Спасибо за помощь.

  • 7
    Посмотрите initializer lists .
  • 0
    Поля после двоеточия будут инициализированы с этими значениями, в этом случае смещение будет 0, а размер будет инициализирован как sz. Смотрите ссылку
Теги:

1 ответ

1

Они просто инициализаторы как часть конструктора.

Поэтому в этом конкретном случае это эквивалентно

shiftedList(int sz) {
   offset = 0;
   size = sz;
   array = new int[size];
}   

За исключением того, что компилятор может улучшить оптимизацию, и инициализация не может привести к каким-либо кодам.

Есть случай, когда должен использоваться список инициализаторов, особенно те, где инициализируется эталонная переменная.

  • 2
    Они не эквивалентны этому. Например, рассмотрим ссылочный член.
  • 0
    Это правда - я не могу придумать лучшего слова, чем «эквивалент», чтобы описать сходство
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню