最終更新日時:
が更新

履歴 編集

function
<tuple>

std::tuple::operator=(C++11)

tuple& operator=(const tuple&);               // (1)
tuple& operator=(tuple&&) noexcept(下記参照); // (2)

template <class... UTypes>
tuple& operator=(const tuple<UTypes...>&);    // (3)

template <class... UTypes>
tuple& operator=(tuple<UTypes...>&&);         // (4)

template <class U1, class U2>
tuple& operator=(const pair<U1, U2>&);        // (5)

template <class U1, class U2>
tuple& operator=(pair<U1, U2>&&);             // (6)

概要

  • (1) : コピー代入を行う
  • (2) : ムーブ代入を行う
  • (3) : 変換可能なtupleからのコピー代入を行う
  • (4) : 変換可能なtupleからのムーブ代入を行う
  • (5) : 変換可能なpairからのコピー代入を行う
  • (6) : 変換可能なpairからのムーブ代入を行う

要件

  • (1) : tupleの全ての要素型iis_copy_assignable<i>::value == trueであること
  • (2) : tupleの全ての要素型iis_move_assignable<i>::value == trueであること
  • (3) : パラメータのtupleの全ての要素型が、元のtupleの全ての要素型にコピー代入可能であり、要素数が同じであること
  • (4) : パラメータのtupleの全ての要素型が、元のtupleの全ての要素型にムーブ代入可能であり、要素数が同じであること
  • (5) : 元のtupleの要素数が2であり、パラメータのpairの全ての要素型が元のtupleの全ての要素型にコピー代入可能であること
  • (6) : 元のtupleの要素型が2であり、パラメータのpairの全ての要素型が元のtupleの全ての要素型にムーブ代入可能であること

例外

  • (2) : tupleの全ての要素型iis_nothrow_move_assignable<i>::value == trueの場合、決して例外を投げない。
  • (4) : パラメータのtupleの全ての要素型が、元のtupleの全ての要素型にムーブ代入可能であり、要素数が同じであること

#include <string>
#include <tuple>

int main()
{
  // コピーコンストラクタ
  {
    std::tuple<int, char, std::string> t1(1, 'a', "hello");
    std::tuple<int, char, std::string> t2 = t1;
  }

  // ムーブコンストラクタ
  {
    std::tuple<int, char, std::string> t = std::tuple<int, char, std::string>(1, 'a', "hello");
  }

  // 変換可能なタプルからのコピー構築
  {
    std::tuple<int, char, const char*> t1(1, 'a', "hello");
    std::tuple<int, char, std::string> t2 = t1;
  }

  // 変換可能なタプルからのムーブ構築
  {
    std::tuple<int, char, std::string> t = std::make_tuple(1, 'a', "hello");
  }

  // 変換可能なpairからのコピー構築
  {
    std::pair<int, char> p(1, 'a');
    std::tuple<int, char> t = p;
  }

  // 変換可能なpairからのムーブ構築
  {
    std::tuple<int, char> t = std::make_pair(1, 'a');
  }
}

出力

バージョン

言語

  • C++11

処理系

参照