Нужно ли инициализировать простые переменные-члены класса?
Быстрый начальный вопрос:
У меня есть, чтобы инициализировать простые переменные-члены класса или им гарантированно присвоены значения по умолчанию в любом случае?
Пример:
class Foo {
int i;
// is i==0 or do I need the following line for that?
Foo() : i(0) {}
};
Спасибо!
Ответы
Ответ 1
Нужно ли инициализировать простой класс? переменные-члены,
Нет, вы не имеете, чтобы инициализировать переменные-члены. Если вы их не инициализируете, не предполагайте, что они будут иметь какое-либо значение.
Если вы создаете тестовую программу и проверяете отладчик, как инициализируются значения, вы можете увидеть их инициализированными как нули, но это не гарантируется. Значения инициализируются тем, что находится в памяти в стеке в этом месте.
или они гарантированно получат их значения по умолчанию в любом случае?
Им не гарантируется получение какой-либо ценности. Если у вас есть объекты-члены, для них будут вызываться конструкторы по умолчанию, но для типов POD инициализация по умолчанию отсутствует.
Несмотря на то, что вам не нужно это делать, рекомендуется инициализировать всех членов вашего класса (чтобы избежать трудностей с поиском ошибок и иметь явное представление вызовов инициализаций/конструкторов).
Ответ 2
Да, это необходимо. Ваш объект будет выделен либо в стеке, либо в куче. У вас нет способа узнать, какие значения содержит эта память, а время выполнения не гарантирует обнуление этого для вас, поэтому вы должны инициализировать переменную.
Ответ 3
Прочитайте this. Эта страница также полезна для многих других вопросов, которые могут возникнуть на каменной дороге обучения С++.
В общем, вам не обязательно, но вам нужно. Опираясь на значения по умолчанию, вы действительно можете вернуться к вам. Также это делает код более понятным для других. Имейте в виду, что список инициализации не влияет на порядок инициализации элементов, который определяется порядком, который они объявляют в классе.