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

时间:2019-05-02 06:55:01

标签: c++ function reference

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

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

int main() 
{ 
    fun() = 30; 
    std::cout << fun(); 
    return 0; 
} 

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

1 个答案:

答案 0 :(得分:6)

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

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

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

如果xautomatic variable,则您的代码将包含undefined behavior

PS。像&这样的int &r = x;一元引用的粗略思考方式是,它对代码进行“转换”为:引入幻像指针int *p = &x;(其中p是新鲜变量不会在其他地方出现),并在该r范围内的任何地方,将*p替换为&r,将p替换为r