首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std :: string :: assign是否取得字符串的"所有权"?

在C++中,std::string::assign函数不会取得字符串的"所有权"。它的主要作用是将一个字符串的内容复制到另一个字符串中。

std::string::assign函数的原型如下:

代码语言:cpp
复制
void assign(const char* s, size_t n);

其中,s是一个指向字符数组的指针,n是要复制的字符数量。

当你使用std::string::assign函数时,它会将s指向的字符串的前n个字符复制到当前字符串对象中。在这个过程中,std::string::assign不会取得s指向的字符串的"所有权",而只是复制了它的内容。

例如:

代码语言:cpp
复制
std::string str1 = "Hello, world!";
const char* str2 = "Hello, C++!";
str1.assign(str2, 6);

在这个例子中,str1的值将被修改为"Hello,",而str2指向的字符串的"所有权"不会被str1取得。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • C++之字符串

    字符串赋值  string类重载了“=”操作符,因此可以直接用"="进行赋值,此外,C++还提供了更加灵活assign()成员函数来对字符串进行赋值。 ..., 5);//assign(cstring, n)         s5.assign(s1, 5);        //assign(string, pos)     s6.assign(12,...------------ 同使用构造函数创建字符串时相同,这里s4和s5也得到了不同结果,因此对于ctring和stringassign实现了不同重载,意义同构造函数。 ...可能最大大小 empty() 判断字符串是否为空  #include #include using namespace std; int main() {    ...s=ss.str();     //ss >> s; } 这个例子通过字符串流将float型数据转换为string,因为不用担心string长度问题,所以也就不用担心是否会溢出。

    67220

    brpc小课堂:从StringPiece说开来

    俗称是StringPiece没有数据所有权。它存储是外部字符串数据指针,而自己并没有开辟空间在存储这份数据(字符串)。...甚至你也可以指定传入std::string起始位置以及长度。也就是说StringPiece不必持有全部原始std::string字符串,而是可以只取其一段。...当然普通std::string构造函数也支持传入另外一个std::string并指定其起始位置和长度,但是std::string做法是将原字符串这一小段字符串拷贝到自己堆存储中来,后面就和原字符串没有瓜葛了...CopyToString()本质是调用std::stringassign()函数。AppendToString()本质是调用std::stringappend()函数。...API差异 比如string_view没有assign()、clear() 以及as_string() 函数。访问函数增加了at(),和一般string类似。

    1.1K20

    掌握Rust:从零开始所有权之旅

    而d是字符串字符串是不可以拷贝,第一次赋值就将所有权 move 给了_e,只能move一次,所以 code 2 编译不通过。 为什么要拷贝或移动?...let d = String::from("hello"); d = String::from("world"); 结果是不行 error[E0384]: cannot assign twice to...所有权可转移 借用 不可变借用可以有多个 可变借用同一时间只能有一个 这些规则,规范了对于一个变量谁持有,离开作用域是否可以释放,变量修改和借用有什么样要求,避免释放后内存被借用,也防止修改和读取内容不一致有...Tips: 本质上可以理解为对读写互斥不同粒度下封装,不需要显式声明可变借用,但内部有可变能力 以RefCell为例,来看看内部可变性 use std::cell::RefCell; let value...一个新概念出现了:生命周期 生命周期是Rust用来标注引用存活周期,借此标识变量借用与作用域是否合法,即借用是否在作用域内还有效,毕竟不能悬空指针(dangling pointer, 借用一个失效内存地址

    29240

    C++17 在业务代码中最好用十个特性

    mutex_;   unsigned int value_ = 0; }; std::string_view std::string_view顾名思义是字符串“视图”,类成员变量包含两个部分:字符串指针和字符串长度...std::string_view 对字符串不具有所有权,且兼容 std::string 和 const char*两种类型。...c++17 之前,我们处理只读字符串往往使用const std::string&,std::string有两点性能优势: 兼容两种字符串类型,减少类型转换和内存分配。...如果传入是明文字符串const char*, const std::string&需要进行一次内存分配,将字符串拷贝到堆上,而std::string_view则可以避免。...但是这种写法模糊了所有权,函数调用方无法确定是否应该接管T*内存管理,而且T*可能为空假设,如果忘记检查则会有 SegFault 风险。

    2.6K20

    1.1 C++ STL 字符串构造函数

    0; } 1.2 字符串对象赋值 如下C++代码,展示了如何使用STL字符串assign()函数对字符串进行赋值和操作。...接着,定义了三个新字符串变量s1、s2和s3,并使用assign()函数对其进行初始化。使用assign()函数第一个形式,将字符串str从第1位开始向后截取4个字符,并赋值给字符串s1。...使用assign()函数第二个形式,将5个字符A填充到字符串s2中。使用assign()函数第三个形式,未指定任何参数,因此字符串s3被初始化为空字符串。 最后,使用cout输出字符串s3内容。...使用compare()函数比较两个字符串变量str1和str2是否相等,如果不相等,则输出False。...// 比较两个字符串是否相等 cout << "False" << endl; string str3 = "hello lyshark"; str3.replace(1, 3, "abcde

    18730

    1.1 C++ STL 字符串构造函数

    C++代码,展示了如何使用STL字符串assign()函数对字符串进行赋值和操作。...接着,定义了三个新字符串变量s1、s2和s3,并使用assign()函数对其进行初始化。使用assign()函数第一个形式,将字符串str从第1位开始向后截取4个字符,并赋值给字符串s1。...使用assign()函数第二个形式,将5个字符A填充到字符串s2中。使用assign()函数第三个形式,未指定任何参数,因此字符串s3被初始化为空字符串。最后,使用cout输出字符串s3内容。...使用compare()函数比较两个字符串变量str1和str2是否相等,如果不相等,则输出False。...// 比较两个字符串是否相等 cout << "False" << endl; string str3 = "hello lyshark"; str3.replace(1, 3, "abcde

    17920

    【C++干货基地】揭秘C++STL库魅力:stiring初步了解和使用

    三、我们为什么要学string? 在C语言中,字符串是以’\0’结尾一些字符集合,为了操作方便,C标准库中提供了一些str系列库函数。...所以在C++中 专门把字符串操作封装成了 string 容器,来给开发者更好调用接口支持。不用去管理底层空间分配使得使用更加省心。...3.1 string 定义 string是表示字符串字符串类 该类接口与常规容器接口基本相同,再添加了一些专门用来操作string常规操作。...0; } empty 判断当前字符串是否为空 #include using namespace std; int main() { string s1("hello gugu"...<< s1[pos]; return 0; } c_str 返回C形式字符串指针 #include using namespace std; int main() { string

    9600

    实现String

    assign 将字符添加到字符串末尾。 at 返回对字符串中指定位置元素引用。 begin 返回一个迭代器,寻址字符串第一个元素。...c_str 将字符串内容转换为C样式,以null终止字符串。 capacity 返回在不增加字符串内存分配情况下可以存储在字符串最大元素数。...compare 将字符串与指定字符串进行比较,以确定两个字符串是否相等,或者在字典上小于另一个。 copy 从源字符串索引位置最多复制指定数量字符到目标字符数组。...empty 测试字符串是否包含字符。 end 返回一个迭代器,该迭代器寻址字符串中最后一个元素之后位置。 erase 从指定位置删除字符串一个元素或元素范围。...); return *this; } // assign a C string to a String String & String::operator=(const char * s) {

    51730
    领券