跳到主要内容

std::string operator=

// (1) Non const version only
constexpr basic_string& operator=( const basic_string& str );

// (2) Non const version only
constexpr basic_string& operator=( basic_string&& str ) noexcept(/* see below */);

// (3) Non const version only
constexpr basic_string& operator=( const CharT* s );

// (4) Non const version only
constexpr basic_string& operator=( CharT ch );

// (5) Non const version only
constexpr basic_string& operator=( std::initializer_list<CharT> ilist );

// (6) Non const version only
template<class StringViewLike>
constexpr basic_string& operator=( const StringViewLike& t );

// (7) Non const version only
constexpr basic_string& operator=( std::nullptr_t ) = delete;

替换字符串的内容。

  • (1) 复制赋值运算符。用 other 的内容的副本替换当前内容。

    注意

    如果 *thisstr 是同一个对象,则此函数无效。

  • (2) 移动赋值运算符。使用移动语义替换其他内容(即,其他数据从其他移动到此容器中)。

    重要

    other 之后处于有效但未指定的状态。

    如果 std::allocator_traits<Allocator>::propagate_on_container_move_assignment::valuetrue,则 *this 的分配器将被 str 的分配器的副本替换。

    如果它为 false 并且 *thisstr 的分配器不相等,则 *this 不能取得 str 所拥有的内存的所有权,并且必须单独分配每个字符,根据需要使用其自己的分配器分配额外的内存。

    失效

    与其他容器移动赋值不同,对 str引用指针迭代器可能会失效。

  • (3) 将内容替换为 s 所指向的空终止字符串,如同通过 assign(s, Traits::length(s))

  • (4) 将内容替换为字符 ch,如同通过 assign(std::addressof(ch), 1)

  • (5) 将内容替换为初始化列表 ilist,如同通过 assign(ilist.begin(), ilist.size())

  • (6)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后将内容替换为 sv,如同通过 assign(sv)

    重载决议

    此重载仅在 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时参与重载决议。

  • (7) std::nullptr_t 的删除构造函数使得 std::string 不能从 nullptr 赋值。

参数

  • ch - 用于初始化字符串字符的值
  • str - 用作源以初始化字符串的字符串
  • s - 指向空终止字符字符串的指针,用作源以初始化字符串
  • ilist - 用于初始化字符串的std::initializer_list
  • t - 可转换为std::basic_string_view的对象,用于初始化字符串

返回值

这个

复杂度

  • (1)str 的大小呈线性关系 - O(str.size())
  • (2)
    *this 的大小上呈线性 - O(size())
    如果分配器不相等且不传播,则也与 str 的大小呈线性关系 - O(size() + str.size())
  • (3)s 的大小呈线性关系 - O(s.size())
  • (4) 常数 - O(1)
  • (5)ilist 的大小呈线性关系 - O(ilist.size())

异常

  • (2) noexcept 规范
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value
|| std::allocator_traits<Allocator>::is_always_equal::value)

如果操作导致 size() > max_size(),则抛出std::length_error

如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

主文件
#include <string>
#include <iostream>
#include <iomanip>

int main()
{
std::string str1;
std::string str2 { "alpha" };

// (1) operator=( const basic_string& );
str1 = str2;
std::cout << std::quoted(str1) << ' ' // "alpha"
<< std::quoted(str2) << '\n'; // "alpha"

// (2) operator=( basic_string&& );
str1 = std::move(str2);
std::cout << std::quoted(str1) << ' ' // "alpha"
<< std::quoted(str2) << '\n'; // "" or "alpha" (unspecified)

// (3) operator=( const CharT* );
str1 = "beta";
std::cout << std::quoted(str1) << '\n'; // "beta"

// (4) operator=( CharT );
str1 = '!';
std::cout << std::quoted(str1) << '\n'; // "!"

// (5) operator=( std::initializer_list<CharT> );
str1 = {'g','a','m','m','a'};
std::cout << std::quoted(str1) << '\n'; // "gamma"

// (6) operator=( const T& );
str1 = 35U; // equivalent to str1 = static_cast<char>(35U);
std::cout << std::quoted(str1) << '\n'; // "#" (ASCII = 35)
}
输出
"alpha" "alpha"
"alpha" ""
"beta"
"!"
"gamma"
"#"
本文源自此 CppReference 页面。它可能为了改进或编辑者的偏好而进行了修改。单击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。

std::string operator=

// (1) Non const version only
constexpr basic_string& operator=( const basic_string& str );

// (2) Non const version only
constexpr basic_string& operator=( basic_string&& str ) noexcept(/* see below */);

// (3) Non const version only
constexpr basic_string& operator=( const CharT* s );

// (4) Non const version only
constexpr basic_string& operator=( CharT ch );

// (5) Non const version only
constexpr basic_string& operator=( std::initializer_list<CharT> ilist );

// (6) Non const version only
template<class StringViewLike>
constexpr basic_string& operator=( const StringViewLike& t );

// (7) Non const version only
constexpr basic_string& operator=( std::nullptr_t ) = delete;

替换字符串的内容。

  • (1) 复制赋值运算符。用 other 的内容的副本替换当前内容。

    注意

    如果 *thisstr 是同一个对象,则此函数无效。

  • (2) 移动赋值运算符。使用移动语义替换其他内容(即,其他数据从其他移动到此容器中)。

    重要

    other 之后处于有效但未指定的状态。

    如果 std::allocator_traits<Allocator>::propagate_on_container_move_assignment::valuetrue,则 *this 的分配器将被 str 的分配器的副本替换。

    如果它为 false 并且 *thisstr 的分配器不相等,则 *this 不能取得 str 所拥有的内存的所有权,并且必须单独分配每个字符,根据需要使用其自己的分配器分配额外的内存。

    失效

    与其他容器移动赋值不同,对 str引用指针迭代器可能会失效。

  • (3) 将内容替换为 s 所指向的空终止字符串,如同通过 assign(s, Traits::length(s))

  • (4) 将内容替换为字符 ch,如同通过 assign(std::addressof(ch), 1)

  • (5) 将内容替换为初始化列表 ilist,如同通过 assign(ilist.begin(), ilist.size())

  • (6)t 隐式转换为字符串视图 sv,如同通过 std::basic_string_view<CharT, Traits> sv = t;,然后将内容替换为 sv,如同通过 assign(sv)

    重载决议

    此重载仅在 std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>truestd::is_convertible_v<const StringViewLike&, const CharT*>false 时参与重载决议。

  • (7) std::nullptr_t 的删除构造函数使得 std::string 不能从 nullptr 赋值。

参数

  • ch - 用于初始化字符串字符的值
  • str - 用作源以初始化字符串的字符串
  • s - 指向空终止字符字符串的指针,用作源以初始化字符串
  • ilist - 用于初始化字符串的std::initializer_list
  • t - 可转换为std::basic_string_view的对象,用于初始化字符串

返回值

这个

复杂度

  • (1)str 的大小呈线性关系 - O(str.size())
  • (2)
    *this 的大小上呈线性 - O(size())
    如果分配器不相等且不传播,则也与 str 的大小呈线性关系 - O(size() + str.size())
  • (3)s 的大小呈线性关系 - O(s.size())
  • (4) 常数 - O(1)
  • (5)ilist 的大小呈线性关系 - O(ilist.size())

异常

  • (2) noexcept 规范
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value
|| std::allocator_traits<Allocator>::is_always_equal::value)

如果操作导致 size() > max_size(),则抛出std::length_error

如果由于任何原因抛出异常,此函数无效(强异常保证)。 (自 C++11 起)

示例

主文件
#include <string>
#include <iostream>
#include <iomanip>

int main()
{
std::string str1;
std::string str2 { "alpha" };

// (1) operator=( const basic_string& );
str1 = str2;
std::cout << std::quoted(str1) << ' ' // "alpha"
<< std::quoted(str2) << '\n'; // "alpha"

// (2) operator=( basic_string&& );
str1 = std::move(str2);
std::cout << std::quoted(str1) << ' ' // "alpha"
<< std::quoted(str2) << '\n'; // "" or "alpha" (unspecified)

// (3) operator=( const CharT* );
str1 = "beta";
std::cout << std::quoted(str1) << '\n'; // "beta"

// (4) operator=( CharT );
str1 = '!';
std::cout << std::quoted(str1) << '\n'; // "!"

// (5) operator=( std::initializer_list<CharT> );
str1 = {'g','a','m','m','a'};
std::cout << std::quoted(str1) << '\n'; // "gamma"

// (6) operator=( const T& );
str1 = 35U; // equivalent to str1 = static_cast<char>(35U);
std::cout << std::quoted(str1) << '\n'; // "#" (ASCII = 35)
}
输出
"alpha" "alpha"
"alpha" ""
"beta"
"!"
"gamma"
"#"
本文源自此 CppReference 页面。它可能为了改进或编辑者的偏好而进行了修改。单击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。