与std :: vector不同,std :: string不提供采用大小的一元构造函数:
std::string s(size); // ERROR
Run Code Online (Sandbox Code Playgroud)
之间有什么区别:
std::string s(size, '\0');
Run Code Online (Sandbox Code Playgroud)
和
std::string s;
s.resize(size);
Run Code Online (Sandbox Code Playgroud)
在共同实施方面的表现?
调整大小会将字符串初始化为所有零字符还是会给它们留下未指定的值?
如果全部为零,是否有任何方法可以构造给定大小的字符串,但是将字符保留为未指定的值?
有一个区别,如在 中std::string s(size, '\0');,字符串所需的所有内存都可以一次分配。然而,对于第二个示例,如果size大于为小字符串优化而存储的字符量,则可能必须执行额外的分配,尽管这是实现定义的,并且在标准中肯定不会在这方面表现得更好。符合 C++ 17 的实现。然而,第一个示例更简洁,并且性能可能更高,因此它可能更可取。调用时,所有新字符都将使用 的默认构造函数(又称为 )s.resize(size);进行初始化。无法使用未指定的值来初始化 a。char'\0'string
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |