avva: (Default)
[personal profile] avva
C++ Rvalue References Explained

Отличная статья об одном из новшеств стандарта C++11 - так называемых "rvalue references". Оказывается, это совсем не страшная штука, и в этой статье всего из 11 страниц автор подробно объясняет, зачем они нужны, как их использовать, и почему, если вы собираетесь использовать rvalue references вместе с exceptions в одном и том же коде, лучше сразу застрелиться.

Процитирую прекрасную таблицу ссылок на ссылки:
  • A& & becomes A&
  • A& && becomes A&
  • A&& & becomes A&
  • A&& && becomes A&&

Date: 2012-11-04 04:34 pm (UTC)
From: [identity profile] pilpilon.livejournal.com
не связанные вещи.

Date: 2012-11-04 10:45 pm (UTC)
From: [identity profile] pilpilon.livejournal.com
совершенно.


int i = 5 ;

char a[i] ;/*illegal, i - lvalue*/
char b[i+1]; /* illegal i+1 - rvalue */

Date: 2012-11-05 08:34 am (UTC)
From: [identity profile] asox.livejournal.com
Для задания размера массива должно использоваться константное выражение, вычислимое на этапе компиляции - т.е. "константное r-value".
В первом случае у нас отсечение идёт по l-value, во втором - "неконстантное r-value", результат вычисления выражения, неопределённого на этапе компиляции.
Собственно константное выражение - суть non-modifiable lvalue (http://www.rsdn.ru/article/cpp/lvalue.xml).
Хотя, гарантий, что компилер не заоптимизирует константную переменную - нет.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 05:32 am
Powered by Dreamwidth Studios