Здравствуйте, eremeer, Вы писали:
E> Разрешите порассуждать человеку, не обремененному обширным опытом программирования и не претендующуему на непогрешимость и исчерпывающую полноту суждений.
Я бы проще сказал — те же преимущества и недостатки, что и у «одиночек»: трудно расширить, проблемы с инициализацией (в т. ч. thread safety), меньше оверхеда.
E>Недостатки
E>Статический объект имеет время жизни равное времени жизни программы и создается даже в том случае, если функция, где он был объявлен, ни разу не вызывалась (в случае не шаблонных функций). Выход — отложенная инициализация.
#include <iostream>
int f()
{
std::cout << "F" << std::endl;
return 42;
}
int g()
{
static int const x = f();
return x;
}
int main()
{
//g();
}
По меньшей мере 2 компилятора не вызывают здесь f().