C ++字符串构造性能

时间:2012-09-25 21:50:55

标签: c++ string performance

我想知道在将字符串传递给函数时(例如插入到向量中)下面的代码是否在#1,#2和#3之间有任何差异。特别是在代码中处理数百万字符串时。

std::vector<std::string> v;
std::string s("foo");
int i = 1;
v.push_back( s + "bar" + boost::lexical_cast<std::string>(i) );  // #1
v.push_back( std::string(s + "bar" + boost::lexical_cast<std::string>(i)) );  // #2
std::string s2 = s + "bar" + boost::lexical_cast<std::string>(i);
v.push_back(s2);  // #3

2 个答案:

答案 0 :(得分:1)

使用一个不错的优化器,应该在#1和#2之间没有区别,但是#1为你提供了编译器实际临时消除的最大机会。

然而,#3包含一个名为temporary的,所以它可能需要一个很好的优化器来检测它只是 - 一个临时的。

答案 1 :(得分:1)

可能不是。它们应该是等价的。

通过预先分配字符串,可以获得性能提升的一种方法是:

std::string s;
s.reserve(10); // or so...
s.append("foobar").append(lexical_cast<std::string>(i));

你可能不会在这里获得足够的表现以使其值得麻烦。