public member function
<utility>

std::pair::operator=

note
// implicitly declared:
copy (1)
pair& operator= (const pair& pr);
copy (1)
pair& operator= (const pair& pr);template <class U, class V>  pair& operator= (const pair<U,V>& pr);
move (2)
pair& operator= (pair&& pr)           noexcept (is_nothrow_move_assignable<first_type>::value &&                     is_nothrow_move_assignable<second_type>::value);template <class U, class V>  pair& operator= (pair<U,V>&& pr);
分配内容
pr 分配为 pair 对象的新内容。

成员 first 被赋值 pr.first,成员 second 被赋值 pr.second

复制形式 (1) 执行复制赋值,其参数的元素在调用后保留其值。 而移动形式 (2) 执行移动赋值(如同为每个元素调用 forward 一样),对于支持移动语义的类型的元素,这意味着 pr 的这些元素处于未指定但有效的状态。

参数

pr
另一个 pair 对象。
这可以是相同类型的对象,也可以是元素类型可以隐式转换的 pair 类型。

返回值

*this

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// pair::operator= example
#include <utility>      // std::pair, std::make_pair
#include <string>       // std::string
#include <iostream>     // std::cout

int main () {
  std::pair <std::string,int> planet, homeplanet;

  planet = std::make_pair("Earth",6371);

  homeplanet = planet;

  std::cout << "Home planet: " << homeplanet.first << '\n';
  std::cout << "Planet size: " << homeplanet.second << '\n';
  return 0;
}
输出
Home planet: Earth
Planet size: 6371


数据竞争

访问所有复制的元素。
对象及其 firstsecond 成员都会被修改。
如果 pr 的任何组件类型支持此赋值的移动语义,则移动赋值 (2) 也会修改 pr

异常安全

如果对 pair 成员执行的任何单个赋值操作都不会抛出异常,则该函数永远不会抛出异常(无抛出保证)。
否则,如果调用了将右值引用作为参数的任何形式,并且 pair 中的至少一种类型可以使用移动语义进行赋值,则该操作可能会将 pair 对象置于无效状态(无保证)。
否则,该操作保证在发生异常的情况下,所涉及的两个 pair 对象最终都处于有效状态(基本保证)。

另见