最終更新日時(UTC):
が更新

履歴 編集

function
<any>

std::any::operator=(C++17)

any& operator=(const any& rhs);     // (1)
any& operator=(any&& rhs) noexcept; // (2)

template <class T>
any& operator=(T&& rhs);            // (3)

概要

  • (1) : コピー代入
  • (2) : ムーブ代入
  • (3) : 任意の型の値を代入

テンプレートパラメータ制約

効果

  • (1) : any(rhs).swap(*this)と等価。この効果自体では例外を送出しない
  • (2) : any(std::move(rhs)).swap(*this)と等価。この効果自体では例外を送出しない。*thisの状態は、この関数を呼び出す前のrhsと等価の状態となり、rhsは有効だが未規定の状態を持つようになる
  • (3) : std::forward<T>(value)をコンストラクタ引数として、型std::decay_t<T>のオブジェクトを直接構築して保持するanyオブジェクトtmpを構築し、tmp.swap(*this)する。この効果自体では例外を送出しない

戻り値

  • (1), (2), (3) : *this

例外

  • (1) : 保持するオブジェクトのコピーコンストラクタが任意の例外を送出する可能性がある
  • (3) : 型std::decay_t<T>の選択されたコンストラクタが、任意の例外を送出する可能性がある

#include <any>
#include <string>
#include <vector>
#include <cassert>

int main()
{
  // (1)
  {
    std::any a = 3;
    std::any b;

    b = a;

    assert(std::any_cast<int>(a) == 3);
    assert(std::any_cast<int>(b) == 3);
  }

  // (2)
  {
    std::any a = std::string("Hello");
    std::any b;

    b = std::move(a);

    assert(std::any_cast<std::string>(b) == "Hello");
  }

  // (3)
  {
    std::any a, b;

    a = 3;
    b = std::string("Hello");

    assert(std::any_cast<int>(a) == 3);
    assert(std::any_cast<std::string>(b) == "Hello");
  }
}

出力

バージョン

言語

  • C++17

処理系