func() = var_name; 是什么意思? C++ 中的赋值?

what does func() = var_name; assignment do in c++?

我正在研究左值和右值,但我对此感到困惑:

#include<iostream>
int& get_val(){
    return 10;
}
int main(){
    get_val() = 5;
    int a = get_val();
    std::cout<<a<<std::endl;

    return 0;
}

我知道 int a = get_val();(即,它将返回值赋给变量),但我想知道它的作用:get_val() = 5;int& get_val() 是做什么的?

我知道我们不能运行这段代码,但我想了解这背后的概念。

您的 get_val 函数定义为 return 对整数的引用;但是,您 实际上 return 是对 常量 的引用,因此任何试图为其赋值的尝试都不会编译。事实上,函数本身(试图 return 对 10 的引用)不会编译; clang-cl 给出这个:

error : non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'

但是,如果您在函数中添加 static int1,并且 return(引用)that,那么你可以使用像 getval() = x; 这样的语句将 x 的值赋给那个 internal static int (否则就是 'invisible' 在函数外)。

这是一个简短的演示:

#include <iostream>

int& get_val()
{
    static int inside = 42;
    std::cout << inside << "\n";
    return inside;
}

int main()
{
    get_val() = 5; // Prints INITIAL value of "inside" then (after the call) assigns
                   // the value 5 to it, via the returned reference
    get_val();     // Prints the modified value
    return 0;
}

上面的例子很简单,可能不会达到任何 real-world 目的;它纯粹是为了演示目的。但是,在某些情况下,可能 您希望函数 return 引用多个不同对象中的任何一个,具体取决于该函数中的计算和决策;然后可以使用此处显示的代码适当修改所选的引用对象。


1 inside 变量需要声明为 static 以便:

  1. 它的生命周期不会在函数 returns 时结束(因此创建 )。
  2. 它的值从一个调用到下一个调用都保持不变。