这是一个有效的功能吗?

use*_*473 13 c++ reference return-value

函数参数中的引用会发生什么,如果它在函数返回时被销毁,那么如何const int *i仍然是一个有效的指针?

const int* func(const int &x = 5)
{
    return &x;
}


int main()
{
    const int *i = func();
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 8

§12.2/ 5:

"函数调用(5.2.2)中的引用参数的临时绑定一直持续到包含该调用的完整表达式完成为止."

这意味着i正在初始化时,它正在获取当时存在的临时对象的地址.i然而,一旦被初始化,临时对象将被销毁,i并将成为另一个悬空指针.

因此,是的,该函数是有效的 - 但是随着您编写的周围代码,您之后添加的尝试取消引用的任何代码i都会给出未定义的行为.


Ave*_*y3R 1

int i指向不可安全访问的一块内存,它不是一个有效的指针。