C ++ 11: Почему разрешено присвоение rvalue?

Насколько я понимаю, причина, по которой опасно возвращать ссылки rvalues ​​на функции from, связана со следующим кодом:

T&& f(T&& x) { do_something_to_T(x); return static_cast<T&&>(x); }
T f(const T& x) { T x2 = x; do_something_to_T(x2); return x2; }
T&& y = f(T());

Это оставляет y как неопределенную висящую ссылку.

Однако я не понимаю, почему приведенный выше код вообще компилируется? Есть ли законная причина назначать ссылку rvalue другой ссылке rvalue? Разве r-значения не предполагаются, грубо говоря, «временными», то есть не должны становиться недействительными в конце выражения? Мне кажется глупым иметь возможность назначать их.

5
задан Clinton 29 February 2012 в 06:19
поделиться