【发布时间】:2013-10-20 07:44:59
【问题描述】:
“The C++ Programming Language 4th Edition”中的一些示例代码让我感到困惑。这是我的测试用例。
Env gcc 版本 4.6.3 (Debian 4.6.3-14+rpi1) 与 -std=c++0x
-
Code1
string var {"Cambridge"}; string& r1 {var};编译失败 -
Code2
string var {"Cambridge"}; string& r1 = var;编译成功 -
Code3
string var {"Cambridge"}; string&& r1 {var};编译成功 -
Code1 编译失败
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 - Code1 应该没问题。第 7.7.2 节,因为 var 是左值,但为什么 code1 不起作用但 code3 在我的情况下起作用?
【问题讨论】:
-
看起来像是 GCC(包括 4.8)中的一个错误,Clang 接受版本 1 就好了。
-
您遇到了DR1288。希望最近的编译器会实施建议的解决方案,而不是标准化缺陷。