C ++引用和左值

时间:2014-05-20 14:10:06

标签: c++ function reference

任何人都可以告诉我以下代码中发生了什么。我期待左值错误,如果我删除函数的引用返回类型将会发生。但它给我的输出为20.请解释。感谢。

int &fun()
{
    static int x = 10;
    return x;
}
int main()
{
    fun() = 20;
    cout << fun();
    return 0;
}

2 个答案:

答案 0 :(得分:3)

输出符合预期。在致电fun() = 20;中,x中的实际 fun()已分配20,因为fun()会返回参考x。在通话cout<<fun();中,会打印指定的值,即20

因为x被声明为static,所以即使在func()返回后它也可以在内存中使用。方法作用域static变量在方法中第一次遇到时创建,并保留到程序终止。 static变量仅初始化一次,后续方法调用将看到最后更新的值。更多信息来自static herehere

答案 1 :(得分:2)

基本C ++语义:

  • 除非返回类型是引用,否则无法分配函数的返回值。
  • 函数不能返回对局部变量的引用,除非它是static变量。
  • 静态变量的值在访问之间保持不变。

如果您要在x之外的fun()分配内容,x必须住在某个地方,对吧?使它static给它一个永久的位置,每次都会被重新访问。这就是20的价值持续存在的原因。