Skip to content

Latest commit

 

History

History
99 lines (78 loc) · 3.18 KB

op_assign.md

File metadata and controls

99 lines (78 loc) · 3.18 KB

operator=

  • string[meta header]
  • std[meta namespace]
  • basic_string[meta class]
  • function[meta id-type]
basic_string& operator=(const basic_string& str);                  // (1)
basic_string& operator=(basic_string&& str) noexcept;              // (2) C++11
basic_string& operator=(basic_string&& str) noexcept
  (allocator_traits<Allocator>::propagate_on_container_move_assignment::value
    || allocator_traits<Allocator>::is_always_equal::value);       // (2) C++17
basic_string& operator=(const charT* s);                           // (3)
basic_string& operator=(charT c);                                  // (4)
basic_string& operator=(initializer_list<charT> il);               // (5) C++11
basic_string& operator=(std::basic_string_view<charT, traits> sv); // (6) C++17
  • initializer_list[link /reference/initializer_list/initializer_list.md]

概要

  • (1) : str*this へコピーする。*thisstr が同一オブジェクトである場合は何も行わない。
  • (2) : str から *this へデータの所有権を移動する。*thisstr が同一オブジェクトである場合は何も行わない。
  • (3) : *this = basic_string(s); と等価。
  • (4) : *this = basic_string(1, c); と等価。
  • (5) : *this = basic_string(il); と等価。
  • (6) : std::basic_string_viewオブジェクトからの変換。return assign(sv) と等価。

効果

コピーを行った場合と、ムーブ代入を行った場合で効果が異なる

メンバ関数 コピーの場合 ムーブ代入の場合
data() str.data() をコピーした領域の先頭ポインタ str.data()
size() str.size() と同じ値 str.size()と同じ値
capacity() size() 以上の値 size() 以上の値

戻り値

*this

例外

ムーブ代入の場合は例外を投げない。

#include <iostream>
#include <string>

int main()
{
  std::string s;

  // (1) basic_string左辺値の代入
  {
    std::string r = "hello";
    s = r;
  }

  // (2) basic_string右辺値の代入
  {
    s = std::string("hello");
  }

  // (3) 文字配列の代入
  {
    s = "hello";
  }

  // (4) 文字の代入
  {
    s = 'a';
  }

  // (5) 文字の初期化子リストを代入
  {
    s = {'h', 'e', 'l', 'l', 'o'};
  }

  // (6) std::basic_string_viewを代入
  {
    s = std::string_view{"Hello World"}.substr(0, 5);
  }

  std::cout << s << std::endl;
}

出力

hello

参照