函式模板
<tuple>

std::forward_as_tuple

template<class... Types>  tuple<Types&&...> forward_as_tuple (Types&&... args) noexcept;
template<class... Types>  constexpr tuple<Types&&...> forward_as_tuple (Types&&... args) noexcept;
前向轉為元組
構造一個 tuple 物件,其元素為 args右值引用,適用於將它們作為引數轉發給函式。

此函式旨在轉發引數,而不是將其結果儲存在命名變數中,因為返回的物件可能包含對臨時變數的引用。

它等效於
1
2
3
4
5
template<class... Types>
  tuple<Types&&...> forward_as_tuple (Types&&... args) noexcept
{
  return tuple<Types&&...>(std::forward<Types>(args)...);
}

引數

args
要作為 tuple 物件轉發的元素的列表,其中包含引用。

返回值

一個 tuple 物件,其中包含 args右值引用,適用於將它們作為引數轉發給函式。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// forward_as_tuple example
#include <iostream>     // std::cout
#include <tuple>        // std::tuple, std::get, std::forward_as_tuple
#include <string>       // std::string

void print_pack (std::tuple<std::string&&,int&&> pack) {
  std::cout << std::get<0>(pack) << ", " << std::get<1>(pack) << '\n';
}

int main() {
  std::string str ("John");
  print_pack (std::forward_as_tuple(str+" Smith",25));
  print_pack (std::forward_as_tuple(str+" Daniels",22));
  return 0;
}

輸出
John Smith, 25
John Daniels, 22


資料競爭

此呼叫未引入任何內容。
請注意,如果 Types 中的任何型別支援移動語義或為左值引用,則其相應的 args 引數可能會被轉發此函式返回的值的函式所修改。

異常安全

無異常保證:此函式從不丟擲異常。

另見