名前空間
変種
操作

std::tuple<Types...>::operator=

提供: cppreference.com
< cpp‎ | utility‎ | tuple
 
 
 
 
(1)
tuple& operator=( const tuple& other );
(C++11以上)
(C++20未満)
constexpr tuple& operator=( const tuple& other );
(C++20以上)
(2)
tuple& operator=( tuple&& other ) noexcept(/* see below */);
(C++11以上)
(C++20未満)
constexpr tuple& operator=( tuple&& other ) noexcept(/* see below */);
(C++20以上)
(3)
template< class... UTypes >
tuple& operator=( const tuple<UTypes...>& other );
(C++11以上)
(C++20未満)
template< class... UTypes >
constexpr tuple& operator=( const tuple<UTypes...>& other );
(C++20以上)
(4)
template< class... UTypes >
tuple& operator=( tuple<UTypes...>&& other );
(C++11以上)
(C++20未満)
template< class... UTypes >
constexpr tuple& operator=( tuple<UTypes...>&& other );
(C++20以上)
(5)
template< class U1, class U2 >
tuple& operator=( const pair<U1,U2>& p );
(C++11以上)
(C++20未満)
template< class U1, class U2 >
constexpr tuple& operator=( const pair<U1,U2>& p );
(C++20以上)
(6)
template< class U1, class U2 >
tuple& operator=( pair<U1,U2>&& p );
(C++11以上)
(C++20未満)
template< class U1, class U2 >
constexpr tuple& operator=( pair<U1,U2>&& p );
(C++20以上)

タプルの内容を別のタプルまたはペアの内容で置き換えます。

1) コピー代入演算子。 other の各要素を *this の対応する要素に代入します。

2) ムーブ代入演算子。 すべての i に対して、 std::forward<Ti>(get<i>(other))get<i>(*this) に代入します。

3) すべての i に対して、 std::get<i>(other)std::get<i>(*this) に代入します。

4) すべての i に対して、 std::forward<Ui>(std::get<i>(other))std::get<i>(*this) に代入します。

5) p.first*this の第1要素に、 p.second*this の第2要素に代入します。

6) std::forward<U1>(p.first)*this の第1要素に、 std::forward<U2>(p.second)*this の第2要素に代入します。

以下の条件を満たさない場合、これらの関数の動作は未定義です。

  • (1) に対しては、 Types のすべての T_i に対して std::is_copy_assignable<T_i>::valuetrue である。
  • (2) に対しては、 Types のすべての T_i に対して std::is_move_assignable<T_i>::valuetrue である。
  • (3) に対しては、 sizeof...(UTypes) == sizeof...(Types) であり、 Types および UTypes のすべての対応する型ペア T_i および U_i に対して、 std::is_assignable<T_i&, const U_i&>::valuetrue である。
  • (4) に対しては、 sizeof...(UTypes) == sizeof...(Types) であり、 Types および UTypes のすべての対応する型ペア T_i および U_i に対して、 std::is_assignable<T_i&, U_i&&>::valuetrue である。
  • (5) に対しては、 sizeof...(Types) == 2 であり、 std::is_assignable<T_0&, const U1&>::valuestd::is_assignable<T_1&, const U2&>::value がどちらも true である。 ただし T_0 および T_1Types を構成する2つの型です。
  • (6) に対しては、 sizeof...(Types) == 2 であり、 std::is_assignable<T_0&, U1&&>::valuestd::is_assignable<T_1&, U2&&>::value がどちらも true である。 ただし T_0 および T_1Types を構成する2つの型です。
(C++17未満)

これらの関数は、要求される代入演算子が無効な場合、またはサイズが一致しない場合、オーバーロード解決に参加しません (または、コピー代入演算子の場合、削除されたものとして定義されます)。 特に、

  • (1) は、 Types のすべての T_i に対して std::is_copy_assignable<T_i>::valuetrue でなければ、削除されたものとして定義されます。
  • (2) は、 Types のすべての T_i に対して std::is_move_assignable<T_i>::valuetrue でなければ、オーバーロード解決に参加しません。
  • (3) は、 sizeof...(UTypes) == sizeof...(Types) でないか、 Types および UTypes のすべての対応する型ペア T_i および U_i に対して std::is_assignable<T_i&, const U_i&>::valuetrue でなければ、オーバーロード解決に参加しません。
  • (4) は、 sizeof...(UTypes) == sizeof...(Types) でないか、 Types および UTypes のすべての対応する型ペア T_i および U_i に対して std::is_assignable<T_i&, U_i&&>::valuetrue でなければ、オーバーロード解決に参加しません。
  • (5) は、 sizeof...(Types) == 2 でないか、 std::is_assignable<T_0&, const U1&>::valuestd::is_assignable<T_1&, const U2&>::value がどちらも true でなければ、オーバーロード解決に参加しません。 ただし T_0 および T_1Types を構成する2つの型です。
  • (6) は、 std::is_assignable<T_0&, U1&&>::valuestd::is_assignable<T_1&, U2&&>::value がどちらも true でなければ、オーバーロード解決に参加しません。 ただし T_0 および T_1Types を構成する2つの型です。
(C++17以上)

目次

[編集] 引数

other - このタプルの内容を置き換えるタプル
p - この2要素タプルの内容を置き換えるタプル

[編集] 戻り値

*this

[編集] 例外

1) (なし)

2)
noexcept 指定:  
noexcept(

    is_nothrow_move_assignable<T0>::value &&
    is_nothrow_move_assignable<T1>::value &&
    is_nothrow_move_assignable<T2>::value &&
    ...

)

3-6) (なし)

[編集]

[編集] 関連項目