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

标签 c++ performance stl

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

void func(std::string const& z = std::string());

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

void func(std::string const& z = my_staticEmptyStr);

列表和 vector 呢?

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

最佳答案

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

vectorlist 的初始化也可以非常便宜,但这取决于实现。

关于字符串、列表、 vector 的默认构造函数的 C++ 成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34320307/

相关文章:

c++ - 错误 : class is not a template

c++ - 不接受输入

C++ 它改变变量的值是因为..?

performance - 优化 GPU 利用率处理离散图像的技术

c++ - 正确实现删除 vector 元素

c++ - 如何将字符串的内容剪切到特定的字符串或位置?

java - 开发 Java Web 应用程序最有效的方法是什么?或者更具体地说,比如 Wicket 应用程序?

java - java程序内存中的临时文件

c++ - c++ 的基于磁盘的 STL 替换

c++ - 现代编译器能否展开使用开始和结束迭代器表示的 `for` 循环