Добрый день господа программисты. Сегодня на работе был спор по поводу хорошо ли явно инициализировать все переменные класса. Сыр бор начался из-за мэпа стл который я засунул в инициализатор конструктора - т.е. просто явно вызвал конструктор мэпа без параметров. Моя точка зрения - все поля класса нужно явно перечислять в конструкторе. Это наглядно и... больше никаких объяснений не нашел. У кого какие точки зрения по этому поводу? Спасибо!
с другой стороны конструктор это особое место где (как я считаю) необходимо явно показать что за это поле я отвечаю и что оно не содержит мусора. Это как хороший этикет в программировании.
RedLord Код (Text): #include <iostream> class Test { public: void print() { std::cout<<m_i<<std::endl; } private: int m_i; }; int main (int argc, char* argv[]) { Test *t = new Test(); t->print(); } GoldFinch +1
Booster это не POD, для POD там действительно будет мусор. но также будет и предупреждение об использовании не инициализированного поля http://codepad.org/oTBoMf0b
Booster пример не в тему. Код (Text): #include <iostream> class Test { public: Test(){} // речь идет про то, что в списке инициализатора нет мембера void print() { std::cout<<m_i<<std::endl; } private: int m_i; }; int main (int argc, char* argv[]) { Test *t = new Test(); t->print(); }
GoldFinch http://codepad.org лажает. в примере, приведенном Booster, как раз все хорошо с инициализацией.
RedLord Полностью согласен, plain мемберы обязательно нужно инициализировать. Что касается остального, то это на вкус. Кому-то нравится лишняя писанина, кому-то нет. Главное чтобы скомпилировалось. ^)
странно, всегда считал что у POD-структур не может быть закрытых членов, счя полистал стандарт - ничего такого не нашел %)