「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