gpt4 book ai didi

c++ - 范围与变量的生命周期

转载 作者:IT老高 更新时间:2023-10-28 21:49:44 27 4
gpt4 key购买 nike

变量的作用域和生命周期之间有什么关系?如果一个变量超出范围,它的内存是否允许被另一个变量覆盖,或者是保留空间直到函数离开。

我之所以问,是因为我想知道下面的代码是否真的有效,或者 *p 是否可能是未定义的

foo() {
int *p;
{
int x = 5;
p = &x;
}
int y = *p;


}

最佳答案

What is Scope?

作用域是可以访问变量的区域或代码段。

What is a lifetime?

生命周期是对象/变量处于有效状态的持续时间。

对于,自动/局部非静态变量 Lifetime 仅限于它们的 Scope
换句话说,一旦创建它们的范围({,})结束,自动变量就会自动销毁。因此名称以自动开头。

What is wrong in your code example?

所以是的,您的代码有一个未定义行为

在您的示例范围中,*p 是创建后的整个函数体。
然而, x 是一个非静态的局部/自动变量,因此 x 的生命周期以它的范围结束,即 } 的右括号它被创建,一旦范围结束 x 不存在。 *p 指向不再存在的东西。

请注意,从技术上讲,x 并不存在于其范围之外,但是编译器可能不会删除 x 的内容,并且可能能够访问x 通过指针超出其范围(如你所愿)。但是,执行此操作的代码不是有效的 C++ 代码。它是调用未定义行为的代码。这意味着任何事情都可能发生(您甚至可能会看到 x 的值(value)是完整的)并且人们不应该期望从这样的代码中观察到可观察的行为。

关于c++ - 范围与变量的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11137516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com