q****x 发帖数: 7404 | 1 string add(const string& s1, const string& s2)
{
string s = s1 + s2;
return s;
}
string add2(const string& s1, const string& s2)
{
return (s1 + s2);
}
记得有参考书说add2()会比add()快,因为编译器直接生成一个临时变量云云。谁能详
细解释一下细节? |
q****x 发帖数: 7404 | 2 this one?
http://en.wikipedia.org/wiki/Return_value_optimization
【在 q****x 的大作中提到】 : string add(const string& s1, const string& s2) : { : string s = s1 + s2; : return s; : } : string add2(const string& s1, const string& s2) : { : return (s1 + s2); : } : 记得有参考书说add2()会比add()快,因为编译器直接生成一个临时变量云云。谁能详
|
i**d 发帖数: 357 | 3 lz如果想深入了解C++这些问题,可以去看看Inside C++ object model这本书。
本质来说,Add里是多产生一个对象S,然后S返回的时候会再产生一个对象。 |
d********t 发帖数: 9628 | 4 似乎只有在return作为lvalue的时候compiler才会做优化。
【在 q****x 的大作中提到】 : string add(const string& s1, const string& s2) : { : string s = s1 + s2; : return s; : } : string add2(const string& s1, const string& s2) : { : return (s1 + s2); : } : 记得有参考书说add2()会比add()快,因为编译器直接生成一个临时变量云云。谁能详
|