最終更新日時:
が更新

履歴 編集

function
<utility>

std::pair::operator=

pair& operator=(const pair& p);               // (1)

template <class U, class V>
pair& operator=(const pair<U, V>& p);         // (2)

pair& operator=(pair&& p) noexcept(下記参照); // (3) C++11

template <class U, class V>
pair& operator=(pair<U, V>&& p);              // (4) C++11

概要

  • (1) : 同じ型のpairをコピー代入する
  • (2) : 変換可能なpairをコピー代入する
  • (3) : 同じ型のpairをムーブ代入する
  • (4) : 変換可能なpairをムーブ代入する

要件

効果

  • (1), (2) : p.firstthis->firstに、p.secondthis->secondにコピー代入する
  • (3), (4) : p.firstthis->firstに、p.secondthis->secondにムーブ代入する

戻り値

*this

例外

  • (3) : is_nothrow_move_assignable<first_type>::value && is_nothrow_move_assignable<second_type>::valueである場合、この関数は例外を決して投げない

#include <iostream>
#include <utility>
#include <string>

template <class T1, class T2>
void print(const std::string& name, const std::pair<T1, T2>& p)
{
  std::cout << name << " : (" << p.first << "," << p.second << ")" << std::endl;
}

int main()
{
  // コピー代入
  {
    std::pair<int, std::string> p(1, "abc");
    std::pair<int, std::string> p1;
    p1 = p;
    print("p1", p1);
  }

  // 変換可能なpairのコピー代入
  {
    std::pair<int, const char*> p(1, "abc");
    std::pair<int, std::string> p2;
    p2 = p;
    print("p2", p2);
  }

  // ムーブ代入
  {
    std::pair<int, std::string> p(1, "abc");
    std::pair<int, std::string> p3;
    p3 = std::move(p);
    print("p3", p3);
  }

  // 変換可能なpairのムーブ代入
  {
    std::pair<int, const char*> p(1, "abc");
    std::pair<int, std::string> p4;
    p4 = std::move(p);
    print("p4", p4);
  }
}

出力

p1 : (1,abc)
p2 : (1,abc)
p3 : (1,abc)
p4 : (1,abc)

バージョン

言語

  • C++11 : (3), (4)

処理系

参照