您能告诉我给定的代码如何到达该输出吗?

Moh*_*ain -2 c++ reference function

代码的输出是30。但是我不确定它是如何实现的。

#include <iostream>      
int &fun() 
{ 
    static int x = 10; 
    return x; 
} 

int main() 
{ 
    fun() = 30; 
    std::cout << fun(); 
    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

我期望输出为10,但显示为30。如何?

Bas*_*tch 6

你fun给出了一个位置的int(因为它返回一个引用)。该位置是static变量x(初始化后,从概念上讲,在程序运行之前)初始化为10。

然后 fun() = 30;被分配该位置。因此x被分配给30。

最后cout << fun()显示该位置的内容。

如果x是一些自动变量,您的代码将具有未定义的行为。

PS。思考的原始方法&类似一元的基准int &r = x;是,它排序的“转换”的代码为:引进幻影指针int *p = &x;(这里p不是别处出现的一些新的变量)和替换r用*p,所以&r有p,无处不在的范围r。