C++: инициализация переменных-членов
У меня путаница при инициализации переменной члена класса.
Предположим, в моем файле.h:
class Test {
int int_var_1;
float float_var_2;
public:
Test();
}
Мой.cpp будет:
Test::Test() : int_var_1(100), float_var_2(1.5f) {}
Теперь, когда я создаю экземпляр класса, переменные инициализируются до 100 и 1,5.
Но если это все, что я делаю в своем конструкторе, я могу сделать следующее в моем.cpp:
int Test::int_var_1 = 100;
float Test::float_var_2 = 1.5f;
Меня смущает разница между инициализацией переменных в конструкторах или оператором разрешения.
Применяется ли этот способ инициализации переменных за пределами конструктора с разрешением области действия только к статическим переменным или же это можно сделать и для обычных переменных?
2 ответа
Вы не можете заменить одно другим. Если переменные-члены не являются статическими, вы должны использовать список инициализации (или тело конструктора, но список инициализации лучше подходит)*. Если переменные-члены являются статическими, то вы должны инициализировать их в определении с помощью синтаксиса во втором блоке.
* Als правильно указывает, что в C++11 вы также можете предоставить инициализатор в объявлении для нестатических переменных-членов:
class test {
int data = 5;
};
Буду иметь data(5)
неявно добавляется в любой список инициализации, где data
явно не упоминается (включая неявно определенный конструктор по умолчанию)
Вы должны использовать первый метод при инициализации нестатического const
переменные (у конструктора). Это единственный способ изменить эти типы переменных-членов (если вы не используете C++11).
Переменные статического члена могут быть инициализированы с помощью соответствующих операторов разрешения области видимости (вне класса).