为什么在g ++ 4.4.6上允许左值为左值参考绑定?

时间:2015-07-14 02:01:31

标签: c++ c++11 rvalue

我正在学习C ++ 11的右值功能。 C ++ Primer第5版说rvalue引用只能绑定到rvalue,但是当我尝试编译这个程序时,它传递了,并且输出为1 1

我不明白为什么。我使用的是g ++ 4.4.6,并用

编译
  

g ++ -Wall -std = c ++ 0x test.cpp -o test

#include <iostream>

using namespace std;

int main()
{
    int i = 0;
    int &&rr = i;

    rr = 1;
    std::cout << rr << std::endl;
    std::cout << i << std::endl;

    return 0;
}

2 个答案:

答案 0 :(得分:7)

您的代码无效,左值无法像书中所说的那样绑定到右值引用。 g++5.1 rejects your code,错误消息

 main.cpp:8:16: error: cannot bind 'int' lvalue to 'int&&'
     int &&rr = i;
                ^
2011年4月,g ++ 4.4.6为released,距离C ++ 11的最终草案approved不到一个月。您所看到的行为要么是gcc错误,要么是C ++ 11标准的早期工作草案所指定的行为。

当前规则在N2844中描述,并在gcc 4.5中实施。

答案 1 :(得分:6)

GCC 4.4系列于2008年11月首次在April 2009发布,主干为closed to all but regression and documentation fixes

阻止右值引用绑定到左值的规则于2009年3月被投票成为标准,正如文件N2844在2008年12月首次提出之后,在文件N2812中。

因此,新规则不可能及时实施GCC 4.4(实际上是为GCC 4.5实施的)。