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 起)

以另一 tuplepair 的内容替换 tuple 的内容。

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 的首元素并赋 p.second*this 的第二元素。

6) 赋 std::forward<U1>(p.first)*this 的首元素并赋 std::forward<U2>(p.second)*this 的第二元素。

这些函数的行为未定义,除非:

  • 对于 (1)std::is_copy_assignable<T_i>::valueTypes 中所有 T_itrue
  • 对于 (2)std::is_move_assignable<T_i>::valueTypes 中所有 T_itrue
  • 对于 (3)sizeof...(UTypes) == sizeof...(Types)std::is_assignable<T_i&, const U_i&>::value 对所有 Types 中的 T_iUTypes 中的 U_i 的对应对为 true
  • 对于 (4)sizeof...(UTypes) == sizeof...(Types)std::is_assignable<T_i&, U_i&&>::value 对所有 Types 中的 T_iUTypes 中的 U_i 的对应对为 true
  • 对于 (5)sizeof...(Types) == 2std::is_assignable<T_0&, const U1&>::valuestd::is_assignable<T_1&, const U2&>::value 都是 true ,其中 T_0T_1 是组成 Types 的二个类型。
  • 对于 (6)sizeof...(Types) == 2std::is_assignable<T_0&, U1&&>::valuestd::is_assignable<T_1&, U2&&>::value 都是 true ,其中 T_0T_1 是组成 Types 的二个类型。
(C++17 前)

这些函数不参与重载决议(或对于复制赋值运算符,为定义为被删除),若任何要求的赋值运算非法或若存在大小不匹配。特别是:

  • (1) 定义为被删除,除非 std::is_copy_assignable<T_i>::valueTypes 中所有 T_itrue
  • (2) 不参与重载决议,除非 std::is_move_assignable<T_i>::valueTypes 中所有 T_itrue
  • (3) 不参与重载决议,除非 sizeof...(UTypes) == sizeof...(Types)std::is_assignable<T_i&, const U_i&>::value 对所有 Types 中的 T_iUTypes 中的 U_i 的对应对为 true
  • (4) 不参与重载决议,除非 sizeof...(UTypes) == sizeof...(Types)std::is_assignable<T_i&, U_i&&>::value 对所有 Types 中的 T_iUTypes 中的 U_i 的对应对为 true
  • (5) 不参与重载决议,除非 sizeof...(Types) == 2std::is_assignable<T_0&, const U1&>::valuestd::is_assignable<T_1&, const U2&>::value 都是 true ,其中 T_0T_1 是组成 Types 的二个类型。
  • (6) 不参与重载决议,除非 sizeof...(Types) == 2std::is_assignable<T_0&, U1&&>::valuestd::is_assignable<T_1&, U2&&>::value 都是 true ,其中 T_0T_1 是组成 Types 的二个类型。
(C++17 起)

参数

other - 要替换此 tuple 内容的 tuple
p - 要替换此 2-tuple 内容的 pair

返回值

*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) (无)

示例

参阅