Описание тега perfect-forwarding
Идеальная пересылка была невозможна в C++03, потому что вывод аргументов шаблона не может отличить rvalue от const lvalues. См. N1385: Проблема пересылки для получения дополнительных сведений о проблеме в C++03.
Поддержка rvalue-ссылок и сворачивания ссылок в C++11 обеспечивает идеальную пересылку, так что универсальные оболочки вызовов могут принимать любой тип аргумента и пересылать эти аргументы другому вызываемому объекту, сохраняя, были ли исходные аргументы lvalue или rvalues. Т.е. при идеальной пересылке сохраняется категория значения исходного аргумента.
Идеальная переадресация осуществляется путем принятия аргументов по "универсальной ссылке" (параметр функции типа T&&
где T
является параметром шаблона) и пересылает их с помощью std::forward<T>
.
Используйте этот тег для вопросов о написании функций C++11, принимающих любой тип выражения, и вопросов о пересылке этих аргументов в другие функции. Используйте move-semantics или rvalue-reference для более общих вопросов.