Буквальные числа мутабельные или нет?

Естественно, это не скомпилируется:

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)

17
задан outis 22 December 2011 в 02:35
поделиться