gpt4 book ai didi

c++ - std::string(size, '\0') 和 s.resize(size) 的区别?

转载 作者:可可西里 更新时间:2023-11-01 18:26:14 26 4
gpt4 key购买 nike

与 std::vector 不同,std::string 不提供采用大小的一元构造函数:

std::string s(size); // ERROR

有什么区别:

std::string s(size, '\0');

std::string s;
s.resize(size);

就他们在常见实现方面的表现而言?

resize 会将字符串初始化为全零字符还是将它们保留为未指定的值?

如果全为零,有什么方法可以构造一个给定大小的字符串,但让字符具有未指定的值?

最佳答案

有一个区别,如在 std::string s(size, '\0'); 中,字符串所需的所有内存都可以一次分配。但是,对于第二个示例,如果 size 大于为小字符串优化存储的字符数量,则可能必须执行额外分配,尽管这是实现定义的,并且绝对不会更多在符合标准的 C++ 17 实现中在这方面表现出色。但是,第一个示例更简洁,性能可能更高,因此它可能更可取。调用 s.resize(size); 时,所有新字符都将使用 char 的默认构造函数(又名 '\0')进行初始化。无法使用未指定的值初始化 string

关于c++ - std::string(size, '\0') 和 s.resize(size) 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38667122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com