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

stu*_*ano 8 c++ rvalue c++11

我正在学习C++ 11的rvalue功能.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;
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*ian 7

您的代码无效,左值无法像书中所说的那样绑定到右值引用.g ++ 5.1使用错误消息拒绝您的代码

 main.cpp:8:16: error: cannot bind 'int' lvalue to 'int&&'
     int &&rr = i;
                ^
Run Code Online (Sandbox Code Playgroud)

g ++ 4.4.6于2011年4月发布,距离C++ 11的最终草案获得批准不到一个月.您看到的行为要么是gcc错误,要么是C++ 11标准的早期工作草案所指定的行为.

当前规则在N2844中描述并在gcc 4.5中实现.


T.C*_*.C. 6

GCC 4.4系列于2009年4月首次发布,除了回归和文档修复之外,主干在2008年11月之前完全关闭.

防止绑定到左值右值引用的规则被评选为标准在2009年3月,作为纸张N2844,2008年12月被首次提出,在论文后N2812.

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