最終更新日時(UTC): 2026年02月17日 14時22分33秒
Akira Takahashi が更新

履歴 編集

function
<list>

# std::list::operator=

    list& operator=(const list& x);           // (1) C++03
    constexpr list& operator=(const list& x); // (1) C++26

    list& operator=(list&& x);                                       // (2) C++11
    list& operator=(list&& x)
      noexcept(allocator_traits<Allocator>::is_always_equal::value); // (2) C++17
    constexpr list& operator=(list&& x)
      noexcept(allocator_traits<Allocator>::is_always_equal::value); // (2) C++26

    list& operator=(initializer_list<T> x);           // (3) C++11
    constexpr list& operator=(initializer_list<T> x); // (3) C++26

## 概要

- (1) : コピー代入。
- (2) : ムーブ代入。
- (3) : 初期化子リストを代入。

## 効果

- (1) : 同じテンプレートパラメータを持つ `list` クラスのオブジェクトをコピー代入する。`*this` の全ての要素が解放され、`x` の全ての要素が `*this` にコピーされる。
- (2) : 同じテンプレートパラメータを持つ `list` クラスのオブジェクトをムーブ代入する。`*this` の全ての要素が解放され、`x` の全ての要素が `*this` にムーブされる。
- (3) : 同じテンプレートパラメータを持つ `initializer_list` クラスのオブジェクトをコピー代入する。`*this` の全ての要素が解放され、`x` の全ての要素が `*this` にコピーされる。

## 戻り値

`*this`

## 計算量

- (1) : 全要素のデストラクタ呼び出しとコピーを行うために、線形時間
- (2) : 全要素のデストラクタ呼び出しをするために、線形時間
- (3) : 全要素のデストラクタ呼び出しとコピーを行うために、線形時間

## 例

    #include <cassert>
    #include <list>
    #include <algorithm>

    int main ()
    {
      // コピー代入
      {
        std::list<int> ls1 = { 1, 2, 3 };
        std::list<int> ls2;

        ls2 = ls1;

        assert(ls1 == ls2);
      }

      // ムーブ代入
      {
        std::list<int> ls1 = { 1, 2, 3 };
        std::list<int> ls2;

        ls2  =  std::list<int>(ls1);

        assert(ls1 == ls2);
      }

      // 初期化子リストからのコピー代入
      {
        std::list<int> ls1;
        ls1 = { 1, 2, 3 };

        // 事後条件の検証
        std::initializer_list<int> init = { 1, 2, 3 };
        std::list<int> ls2;
        ls2 = init;

        assert(std::equal(ls2.begin(), ls2.end(), init.begin()));
      }
    }

### 出力

## 参照

- N2679 Initializer Lists for Standard Containers(Revision 1)
  - (3)の経緯となる提案文書
- N4258 Cleaning-up noexcept in the Library, Rev 3
  - `noexcept` 追加の経緯となる提案文書
- P3372R3 constexpr containers and adaptors