- 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
へコピーする。*this
とstr
が同一オブジェクトである場合は何も行わない。 - (2) :
str
から*this
へデータの所有権を移動する。*this
とstr
が同一オブジェクトである場合は何も行わない。 - (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