我想知道在将字符串传递给函数时(例如插入到向量中)下面的代码是否在#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
答案 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));
你可能不会在这里获得足够的表现以使其值得麻烦。