问题描述
.mat-horizontal-stepper-header {
pointer-events: none !important;
}
清除 #include <string>
using namespace std::literals;
int main()
{
auto str = std::string{};
str.resize(1024);
// #1
str = {};
// #2
str = "";
// #3
str = ""s;
// #4
str.clear();
// #5
str.resize(0);
str.shrink_to_fit();
}
对象的首选方法是什么?为什么?
解决方法
问题的正确答案
清除 std::string 对象的首选方法是什么?
(您在询问之前就知道这一点)是 #4,str.clear();
,因为这是清除字符串。
- #1 是初始化
- #2 和 #3 是赋值
- #4,答案,清除字符串
- #5 调整字符串大小
如果您对其他见解感兴趣,您可以将代码复制并粘贴到 Godbolt 中并检查汇编器输出。
惯用的正确分析器是#4,也许是#1
,这取决于你想从代码中得到什么以及你最喜欢什么风格。
对于所有意图和目的,#1
和 #2
的行为相同 - 只分配空数据而不更改 capacity()
。
#3
构造新字符串并立即将其移动分配给旧字符串。这不仅改变了size()
,而且还改变了capacity()
。版本 #5
执行相同的操作,但不需要构造新的 std::string
。
最后 #4
更改大小并可能更改容量,但这取决于实现。