作用域和生命周期
作用域
作用域决定了一个名称在代码的哪些部分可见。
函数名的作用域
cpp
void foo(); // 函数名在声明后全局可见
int main() {
foo(); // 可以调用
}函数内部变量的作用域
cpp
void function() {
int x = 10; // 函数作用域,从此处开始可见
if (true) {
int y = 20; // if 块作用域
std::cout << x << y; // x 和 y 都可见
}
// y 在此处不可见
std::cout << x; // x 仍然可见
}局部作用域
cpp
void demo() {
// 块作用域
{
int a = 1;
} // a 在此销毁
// for 循环作用域
for (int i = 0; i < 10; i++) {
// i 只能在这里使用
}
}生命周期
生命周期(Lifetime)决定变量何时创建、何时销毁。
自动生命周期
cpp
void func() {
int x = 5; // 进入函数时创建,离开函数时销毁
// x 的生命周期:函数调用期间
}静态生命周期
cpp
void func() {
static int count = 0; // 程序启动时创建,程序结束时销毁
count++;
}
int main() {
func(); // count = 1
func(); // count = 2
// count 在程序结束前一直存在
}动态生命周期
cpp
void func() {
int *p = new int(10); // 手动分配
delete p; // 手动释放
// 或者使用智能指针自动管理
auto p2 = std::make_unique<int>(20); // 自动释放
}