哪个是清除 std::string 对象的首选方法?

问题描述

.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 更改大小并可能更改容量,但这取决于实现。