std::tuple::operator=

来自cppreference.com
< cpp‎ | utility‎ | tuple
tuple& operator=( const tuple& other );
(1) (C++11 起)
tuple& operator=( tuple&& other ) noexcept(/* see below */);
(2) (C++11 起)
template< class... UTypes >
tuple& operator=( const tuple<UTypes...>& other );
(3) (C++11 起)
template< class... UTypes >
tuple& operator=( tuple<UTypes...>&& other );
(4) (C++11 起)
template< class U1, class U2 >
tuple& operator=( const pair<U1,U2>& p );
(5) (C++11 起)
template< class U1, class U2 >
tuple& operator=( pair<U1,U2>&& p );
(6) (C++11 起)

以另一 tuple 或 pair 的内容替换 tuple 的内容。

1) 复制赋值运算符。以 other 对应元素的副本替换每个元素。

2) 移动赋值匀速阿奴发。以 other 对应元素用移动语义替换每个元素。

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

[编辑] 示例

[编辑] 参阅