c++中string的assign方法使用

c++中string的assign方法使用

string的实际.h和.cpp文件是basic_string.hbasic_string.tcc,所以string中assign也在这两个文件声明和定义;

1.assign的声明:

basic_string& assign(const basic_string& __str)
basic_string& assign(basic_string&& __str)
basic_string& assign(const basic_string& __str, size_type __pos, size_type __n)
basic_string& assign(const _CharT* __s, size_type __n)
basic_string& assign(const _CharT* __s)
basic_string& assign(size_type __n, _CharT __c)
basic_string& assign(_InputIterator __first, _InputIterator __last)
basic_string& assign(initializer_list<_CharT> __l) 

2.assign的一个定义:

其实string的赋值运算符basic_string& operator=(const basic_string& __str)就是调用了assign方法。赋值运算符就是简单的包装了assign方法:

basic_string&
operator=(const basic_string& __str)
{ return this->assign(__str); }

其中:basic_string& assign(const basic_string& __str)的定义:

basic_string&
assign(const basic_string& __str)
{
    this->_M_assign(__str);
    return *this;
}

所以:

string s1;
string s2;
s1=s2;
s1.assign(s2);是等效的

例子:

#include <iostream>
#include <string>
#include <vector>
using std::vector;
using std::string;
using std::cin;
using std::cout;
using std::endl;
void test01()
{
    string s1;//默认初始化,s1是一个空的字符串
    string s2(s1);//s2是s1的副本,使用了拷贝构造函数
    string s3 = s2;//s3是s2的副本,也就是s1的副本,使用赋值运算符
    string s4("4444");//s4是字面值"4444"的副本,除了最后一个字符
    string s5="5555";//拷贝初始化,同上
    string s6(4,'6');//初始化n个字符'6‘串成的字符串
    string s7 = string(4,'7');//拷贝初始化,同上


    s1.assign(s6);
    s2 = "2222";
    vector<string> vecStr{s1,s2,s3,s4,s5,s6,s7};
    for(const auto &value:vecStr)
    {
        cout<<"sddress:"<<&value<<"  value:"<<value<<endl;
    }
}

int main()
{
    ::test01();
    return 0;
}

运行结果图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zqw_yaomin/article/details/81281235