программистское, для знающих C++
Nov. 4th, 2012 03:39 pmC++ Rvalue References Explained
Отличная статья об одном из новшеств стандарта C++11 - так называемых "rvalue references". Оказывается, это совсем не страшная штука, и в этой статье всего из 11 страниц автор подробно объясняет, зачем они нужны, как их использовать, и почему, если вы собираетесь использовать rvalue references вместе с exceptions в одном и том же коде, лучше сразу застрелиться.
Процитирую прекрасную таблицу ссылок на ссылки:
Отличная статья об одном из новшеств стандарта C++11 - так называемых "rvalue references". Оказывается, это совсем не страшная штука, и в этой статье всего из 11 страниц автор подробно объясняет, зачем они нужны, как их использовать, и почему, если вы собираетесь использовать rvalue references вместе с exceptions в одном и том же коде, лучше сразу застрелиться.
Процитирую прекрасную таблицу ссылок на ссылки:
- A& & becomes A&
- A& && becomes A&
- A&& & becomes A&
- A&& && becomes A&&
no subject
Date: 2012-11-04 01:56 pm (UTC)А вообще, из всех новшеств Ц++11, эти новые ссылки самые неинтуитивные. Хотя, может это старость наступает...
no subject
Date: 2012-11-04 02:20 pm (UTC)no subject
Date: 2012-11-04 02:34 pm (UTC)Похоже что C++ стремительно деградирует к этому состоянию. Вообще, все стремительно портится, последние времена наступают.
no subject
Date: 2012-11-04 02:50 pm (UTC)no subject
Date: 2012-11-04 03:01 pm (UTC)Rvalue references allow a function to branch at compile time (via overload resolution)
on the condition "Am I being called on an lvalue or an rvalue?".
"Остальное - комментарий".
no subject
Date: 2012-11-04 03:19 pm (UTC)Consider:
const int r = 37;
Is r an l-value or r-value? By the first definition, it is an r-value, since it cannot be on the left side of assignment. But by the second definition, it is an l-value, since it refers to a memory location, and its address can be taken.
no subject
Date: 2012-11-04 03:25 pm (UTC)no subject
Date: 2012-11-04 03:35 pm (UTC)In C++, this is still useful as a first, intuitive approach to lvalues and rvalues. However, C++ with its user-defined types has introduced some subtleties regarding modifiability and assignability that cause this definition to be incorrect.
no subject
Date: 2012-11-04 03:40 pm (UTC)Still, it is now clear that he means to use the second definition in my case.
no subject
Date: 2012-11-04 03:44 pm (UTC)no subject
Date: 2012-11-04 03:52 pm (UTC)no subject
Date: 2012-11-04 03:58 pm (UTC)зачем же тогда мучить себя крестами?
(это риторический вопрос).
no subject
Date: 2012-11-04 04:09 pm (UTC)no subject
Date: 2012-11-04 04:10 pm (UTC)no subject
Date: 2012-11-04 04:16 pm (UTC)no subject
Date: 2012-11-04 04:24 pm (UTC)r-value
Иначе код
const int r = 37;
char s[r];
был бы валиден (периодически встречаю утверждение, что так оно и есть, но, почему-то, компиляторы обычно ругаются).
no subject
Date: 2012-11-04 04:25 pm (UTC)no subject
Date: 2012-11-04 04:26 pm (UTC)no subject
Date: 2012-11-04 04:34 pm (UTC)no subject
Date: 2012-11-04 05:13 pm (UTC)no subject
Date: 2012-11-04 05:15 pm (UTC)no subject
Date: 2012-11-04 05:27 pm (UTC)no subject
Date: 2012-11-04 05:51 pm (UTC)no subject
Date: 2012-11-04 05:53 pm (UTC)no subject
Date: 2012-11-04 06:27 pm (UTC)