“The C++ Programming Language 4th Edition”中的一些示例代码让我感到困惑。这是我的测试用例。左值初始化失败
的Env gcc版本4.6.3(Debian的4.6.3-14 + rpi1)与-std =的C++ 0x
- 代码1
string var {"Cambridge"}; string& r1 {var};
编译失败 - 代码2
string var {"Cambridge"}; string& r1 = var;
编译成功 - 代码3
string var {"Cambridge"}; string&& r1 {var};
编译成功 - 代码1编译与
g++ -g -DLINUX -std=c++0x -c src/dummy.cpp -o src/dummy.o src/dummy.cpp: In function ‘int main(int, char**)’: src/dummy.cpp:26:17: error: invalid initialization of non-const reference of type ‘std::string& {aka std::basic_string<char>&}’ from an rvalue of type ‘<brace-enclosed initializer list>’ make: *** [src/dummy.o] Error 1
- 代码1失败应该是根据书确定。 7.7.2节,因为var是一个左值,但为什么code1不起作用,但code3在我的情况下工作?
看起来像GCC(包括4.8)中的错误,铛接受版本1就好了。 –
您遇到[DR1288](http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1288)。希望最近的编译器能够实现提出的解决方案,而不是标准化的缺陷。 – dyp