2013-02-17 5 views
3

Я пытаюсь понять новые возможности C++ 11, и у меня есть два вопроса относительно ссылок на rvalue.C++ 11 Справочные вопросы rvalue

  1. Я не видел примеры, когда функции возвращают RValue ссылки (кроме std::move). Существуют ли случаи, когда имеет смысл это делать? E. g., int&& foo(...).

  2. Существуют ли случаи, когда имеет смысл иметь ссылки rvalue на const, либо при объявлении локальных переменных, либо в качестве аргументов функции? E. g., foo(int const&& i).

+0

'1)' Move - основной пример. '2)' duplicate. –

+0

http://stackoverflow.com/questions/4938875/do-rvalue-references-to-const-have-any-use <- dup – Mat

+0

Возможный дубликат [Когда должен использоваться std :: move для возвращаемого значения функции ?] (http://stackoverflow.com/questions/14856344/when-should-stdmove-be-used-on-a-function-return-value) – Ali

ответ

4

1) Я не видел примеры, когда функции возвращают RValue ссылки (кроме std::move). Существуют ли случаи, когда имеет смысл это делать?

Помимо библиотеки функций, которые не делают гораздо больше, чем литья свой аргумент к ссылке RValue (например, std::move и, при необходимости, std::forward) и возвращает этот аргумент, я не верю, что вы встретитесь, что очень довольно часто.

2) Существуют ли случаи, когда имеет смысл иметь ссылки raleue на const?

Не многие. На самом деле почти нет. Ссылки Rvalue используются, когда вы хотите привязываться к объекту, который в итоге вам нужен, переместить, а так как вы не можете перемещаться из объекта const (потому что перемещение изменяет состояние объекта, из которого вы перемещаетесь, и const обещает противоположное) нет смысла иметь ссылку rvalue на const. Также обратите внимание, что lvalue ссылки на const могут также связываться с rvalues. Есть a few use cases for that.