关于函数返回int&&的混淆

时间:2015-09-21 04:01:21

标签: c++ lvalue rvalue

我写了一些测试代码。

int getInt() {
  int a = 3;
  return a;
}

int& getIntR() {
  int a = 3;
  return a;
}

int getRL() {
   return int(1);
}

int&& getRRL() {
    return getRL();
}

int main() {
    // works, even though there may cause some problem
    int& d = getIntR();
    // right,reference to a temporary variable
    int&& e = getInt();
    // right,because the returned value is lvalue which can't be assigned to rvalue referecen
    //int&& f = getIntR();

    // here is the code which confused me
    int& g = getRRL();

    int&& ee = 10;  
    int& e = ee;

}

我构造一个函数返回一个int&&类型,所以我需要一个临时变量。 正如getRRL()所示,我认为代码可能会这样对待。

int&& temp = 1;
int&g = temp;

temp是对rvalue的引用,但它本身是一个左值,所以我可以将它赋给int&,但是conpiler说"非const引用的初始值必须是左值"这意味着返回的类型不是左值。 但是下面的代码效果很好。

int&& ee = 10;  
int& e = ee;

有人可以告诉我原因吗?非常感谢!

0 个答案:

没有答案