Scope - это концепция времени компиляции, а не концепция времени выполнения.Это относится к видимости имен, а не времени жизни объектов.
У вас есть три вещи с именем f
.Один из них является локальным для main
;остальные локальны для DoSomething
и DoSomething2
соответственно.Для первых двух область действия (имени, а не объекта) распространяется на закрывающий }
.
время жизни объекта с именем f
, определенного в main
продолжается до main
возврата.Это единственный объект File
в коде, который вы нам показали.
(И если вы не используете автономную (т.е. встроенную) реализацию, это int main()
, а не void main()
. Пожаловаться накто бы ни учил вас, что void main()
правильно.)