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 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).
Хотя, гарантий, что компилер не заоптимизирует константную переменную - нет.

January 2026

S M T W T F S
    1 2 3
4 5 6 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 7th, 2026 03:42 pm
Powered by Dreamwidth Studios