与 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/