字符串,列表,向量的默认构造函数的C ++开销

时间:2015-12-16 19:18:41

标签: c++ performance stl

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

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

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

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

列表和向量怎么样?

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

2 个答案:

答案 0 :(得分:4)

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

vectorlist初始化也非常便宜,但这取决于实施。

答案 1 :(得分:3)

  

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

如果您有一个static空字符串,最好使用它。构建一个新对象并对其进行破坏会花费一些时间,无论它多么小。

如果构造和销毁默认构造的static根本不需要任何时间,那么使用std::string空字符串不会丢失任何内容。

如果默认构造的std::string在构造函数和析构函数中花费很少的时间,那么你可能会在程序的生命周期中获得相当多的时间,具体取决于调用函数的次数。 / p>