我正在学习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;
}
答案 0 :(得分:7)
您的代码无效,左值无法像书中所说的那样绑定到右值引用。 g++5.1 rejects your code,错误消息
2011年4月,g ++ 4.4.6为released,距离C ++ 11的最终草案approved不到一个月。您所看到的行为要么是gcc错误,要么是C ++ 11标准的早期工作草案所指定的行为。main.cpp:8:16: error: cannot bind 'int' lvalue to 'int&&' int &&rr = i; ^
答案 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实施的)。