Здравствуйте, dandy, Вы писали:
D>Ну, вообще код типа этого — объявление статической переменной внутри функции, это потенциальный источник ошибок в мало — мальски обьемной программе. Это, наверное, не мое D>дело, но думаю, что так писать код вообще не стоит.
Разрешите порассуждать человеку, не обремененному обширным опытом программирования и не претендующуему на непогрешимость и исчерпывающую полноту суждений.
Определение статической константной переменной в функции-члене.
Преимущества.
1 Определение в теле функции-члена
Имеет смысл в том случае, если переменная используется лишь в одной (данной) функции-члене.
1.1 Инкапсуляция, сокрытие деталей реализации, т.е. "потребителю" кода становится неизвестной возможно лишняя информация о типе, способе инициализации, о внутренней структуре класса.
1.2 Упрощение интерфейса класса, он становится менее перегруженным информацией, более сконцентированным на конечных задачах
1.3 Повышение понятности кода вследствие использования переменной в месте ее инициализации (в том же блоке кода):у читающего код отпадают вопросы "в каком файле объявлена эта переменная, чем проинициализирована" и прочие.
1.4 Если бы переменная не была константной, то можно было бы упомянуть об ограничении области модификации, что могло бы облегчить отслеживание возможных модификаций переменной при чтении кода или при отладке.
1.5 Пункты 1.3 и 1.4 ведут к повышению управляемости кода.
2 Статическая переменная в теле функции-члена
Имеет смысл в том случае, если инициализация требуется единожды (н-р реализация синглтона) и/или связана с ресурсоемкими операциями.
3 Константная статическая переменная в теле функции-члена
Необходима, если не предполагается дальнейшая модификация переменной.
4 Определение статической константной переменной в функции-не-члене
Справедливы все аргументы, кроме 1.2
Недостатки
Статический объект имеет время жизни равное времени жизни программы и создается даже в том случае, если функция, где он был объявлен, ни разу не вызывалась (в случае не шаблонных функций). Выход — отложенная инициализация.