“The C++ Programming Language 4th Edition”中的一些示例代码让我感到困惑。这是我的测试用例。
带有 -std=c++0x 的环境gcc 版本 4.6.3 (Debian 4.6.3-14+rpi1)
- 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 在我的情况下起作用?