字符串、列表、向量的默认构造函数的 C++ 成本

zzz*_*777 3 c++ performance stl

在许多情况下,我想传递对 const 字符串参数的引用,默认为空字符串。

void func(std::string const& z = std::string());
Run Code Online (Sandbox Code Playgroud)

我想知道调用默认构造函数与传递对某些静态空字符串的引用有多昂贵?

void func(std::string const& z = my_staticEmptyStr);
Run Code Online (Sandbox Code Playgroud)

列表和向量呢?

更新。不幸的是,除了在每个需要它的类中都有自己的副本之外,我没有看到一种很好的通用方法来拥有静态空 xxx 对象。幸运的是,在我看来,stl 类的默认构造函数都不需要内存分配,所以我决定在所有路径上以传统方式进行分配,除了经常调用的路径。

Mar*_*low 5

这取决于实现。如果标准库中的字符串使用“小字符串优化”(大多数现代库都这样做),则string默认构造函数可能只有三个指令。(归零三个字)。

vector并且list初始化起来也很便宜,但这取决于实现。