Я читаю стандарт на xvalue
, Это тесно связано с rvalue reference
выражение. Но при программировании я действительно не могу найти сценарии, которые требуют xvalue
,
Например: функция myClass&& f()
вернуть rvalue reference
, Так выражение f()
это xvalue. Но как это полезно? Как я могу использовать эту технику в программировании?
Если другая функция myClass g()
определяется, в чем разница g()
а также f()
?
При каких обстоятельствах я должен использовать f() and xvalue
вместо g() prvalue
?
В вашем примере вы определили функцию g
который возвращает значение и функцию f
который возвращает значение x
Что они имеют в общий является то, что если вы передаете результат вызова функции, g()
а также f()
соответственно к другой функции h(...)
они оба предпочтут перегрузку h
который принимает в качестве аргумента значение r (если есть несколько перегрузок h
).
разница между g()
а также f()
в том, что g()
не имеет динамического типа (то есть динамический тип такой же, как статический (= объявленный) тип), тогда как f()
имеет динамический тип (возможно, отличающийся от статического типа), другими словами, если он определен так, чтобы возвращать ссылку на rvalue на базовый класс, он включит полиморфное поведение. (Именно эта характеристика разделяет значения xvalue со значениями lvalue, поэтому значения xvalues и lvalue вместе образуют большую группу значений glvalues, тогда как значения prvalue только rvalues.)
Для примеров использования я просто сошлюсь на этот существующий вопрос: Есть ли случай, когда возврат по rvalue-ссылке полезен.
Других решений пока нет …