Подтвердить что ты не робот

Какие rvalues ​​имеют имена?

@FredOverflow, упомянутый в чате С++, который this является редким случаем rvalues ​​с именами. С++ 0x FDIS упоминается в 5.1.1 [expr.prim.general] p4:

В противном случае, если член-декларатор объявляет нестатический элемент данных (9.2) класса X, выражение this является значением класса "указатель на X" внутри необязательного скобки или равно-инициализатор. Он не должен появляться в другом месте в деклараторе участника. (акцент мой)

Что там есть, если есть?

4b9b3361

Ответ 1

Одним из важных случаев являются перечисления

enum arity { one, two };

Выражения one и two являются значениями r (точнее, prvalues ​​в С++ 0x). Другими являются нестандартные параметры шаблона

template<int *P> struct A { };

Выражение P также является rvalue (более конкретно, prvalue в С++ 0x).

Ответ 2

  • Булевские литералы true и false являются значениями типа bool.
  • nullptr - это prvalue типа nullptr_t.
  • Когда вы возвращаете именованную переменную из функции, она становится xvalue в контексте этого выражения, а xvalue - rvalue (в §3.10/1).

Может быть больше, но это все, о чем я могу думать в данный момент (и третий сомнительный - это действительно выражение, что значение x, но с чем-то вроде return x; (где x является локальным переменная, и вы возвращаете значение, а не ссылку), имя переменной - это выражение. Имя действительно относится к glvalue, а в выражении, которое значение (но не действительно имя) преобразуется в значение xvalue ( который является rvalue).