1
int main() 
{
    float* ptr;

    {
        float f{10.f};
        ptr = &f;
    }

    *ptr = 13.f;
    // Do more stuff with `*ptr`...
}

使用/访问是有效的还是未定义的行为*ptr

我测试了与上述示例类似的情况,一切似乎都可以正常工作,就好像嵌套块中变量的生命周期由于指针而延长了一样。

我知道const&(常量引用)会延长临时对象的生命周期。指针也一样吗?

4

2 回答 2

6

这是未定义的行为,因为您正在访问已被释放的对象。

该变量f是在该特定范围内声明的。当执行流程达到:

*ptr = 13.f;

该对象已被释放并ptr指向f.

因此,不,f没有延长的寿命。

于 2013-12-15T13:48:50.717 回答
5

浮点数将超出范围,您的指针将引用未分配的内存区域 -> 使用它将导致 UB。

于 2013-12-15T13:49:06.770 回答