我想知道在将字符串传递给函数时(例如,插入到 vector 中),下面的代码在#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
最佳答案
有了一个像样的优化器,#1 和#2 之间应该没有区别,但是#1 给你最大的机会让编译器实际进行临时消除。
但是,#3 包含一个命名的临时文件,因此它可能需要一个强大的优化器来检测它只是一个临时文件。
关于C++ 字符串构造性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12591609/