文字列を関数に渡すとき(たとえば、ベクトルに挿入するとき)、以下のコードに#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