ли C++ выделяет память для переменной var
еще до создания foo?
Да, это так, в том смысле, что память var
будет в конечном счете забронирована заранее. Когда постоянное значение 2
записано в var
, память имеет реализацию. Единственное, что стандартные гарантии - это то, что это произойдет в какой-то момент, прежде чем позвонить foo::bar()
.
Если вы инициализируете свою статическую переменную с помощью выражения с побочными эффектами (например, совершив вызов функции), этот вызов будет выполнен в первый раз, когда вы выполните функцию.
после того, как foo был разрушен, var будет существовать во всей программе.
var
будет существовать независимо от любых случаев foo
, которые могут быть созданы вашей программой. Когда вы вызываете foo::bar()
в любое время, вы получите последнее значение var
, указанное вашей программой.
* before * первый вызов 'foo :: bar()'? Что, если начальное значение имело побочные эффекты? (разрешено в C++, а не в C) Связаны ли эти побочные эффекты в непредсказуемое время? –
Распределение памяти не является инициализацией. * Инициализация * (ранее выделенной области памяти) произойдет именно в первый раз, когда вызывается функция. Следует отметить, что память будет распределяться статически при запуске программы, не используя 'malloc' или тому подобное. – 5gon12eder
@BenVoigt Ах, эти надоедливые побочные эффекты! Благодаря! – dasblinkenlight