Естественно, это не скомпилируется:
int &z = 3; // error: invalid initialization of non-const reference ....
и это скомпилирует:
const int &z = 3; // OK
Теперь рассмотрим:
const int y = 3;
int && yrr = y; // const error (as you would expect)
int && yrr = move(y); // const error (as you would expect)
Но эти следующие строки компилируются для меня. Я думаю, что это не должно быть.
int && w = 3;
int && yrr = move(3);
void bar(int && x) {x = 10;}
bar(3);
Не будут ли эти две последние строки разрешать изменение буква 3? В чем разница между 3
и const int? И, наконец, есть ли опасность с "модификацией" литералов?
(g++ - 4.6 (GCC) 4.6.2 с -std=gnu++0x -Wall -Wextra
)