Некоторые примеры кода из «Язык программирования C++ 4th Edition» заставляет меня запутываться. Вот мои тестовые примеры.Ошибка инициализации lvalue
конв 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;
Compiling Succeed - Код3
string var {"Cambridge"}; string&& r1 {var};
Компиляция Succeed - 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 является lvalue, но почему код1 не работает, но code3 работает в моей ситуации?
Похож на ошибку в GCC (включая 4.8), Clang принимает версию 1 просто отлично. –
Вы столкнулись с [DR1288] (http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1288). Надеемся, что последние компиляторы будут выполнять предлагаемую резолюцию вместо стандартизованного дефекта. – dyp