0

我想知道在将字符串传递给函数时(例如插入向量),下面的代码在#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
4

2 回答 2

1

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

但是,#3 包含一个命名的临时文件,因此它可能需要一个出色的优化器来检测它只是一个临时文件。

于 2012-09-25T21:53:17.170 回答
1

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

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

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

不过,您可能不会在这里获得足够的性能以使其值得麻烦。

于 2012-09-25T21:54:17.840 回答