q****x 发帖数: 7404 | 1 【 以下文字转载自 JobHunting 讨论区 】
发信人: quantx (X矿工), 信区: JobHunting
标 题: 问个C++ 编译器临时变量的问题
发信站: BBS 未名空间站 (Sat Dec 3 21:03:49 2011, 美东)
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()快,因为编译器直接生成一个临时变量云云。谁能详
细解释一下细节? |
t****t 发帖数: 6806 | 2 google NRVO.
【在 q****x 的大作中提到】 : 【 以下文字转载自 JobHunting 讨论区 】 : 发信人: quantx (X矿工), 信区: JobHunting : 标 题: 问个C++ 编译器临时变量的问题 : 发信站: BBS 未名空间站 (Sat Dec 3 21:03:49 2011, 美东) : string add(const string& s1, const string& s2) : { : string s = s1 + s2; : return s; : } : string add2(const string& s1, const string& s2)
|
q****x 发帖数: 7404 | 3 special case of rvo?
【在 t****t 的大作中提到】 : google NRVO.
|
j********g 发帖数: 88 | 4 RVO:
std::string rvo()
{
return std::string("Foo");
}
NRVO:
std::string nrvo()
{
std::string foo("bar");
return foo;
}
|
x****u 发帖数: 44466 | 5 这个是C++0x特性吧。
【在 j********g 的大作中提到】 : RVO: : std::string rvo() : { : return std::string("Foo"); : } : NRVO: : std::string nrvo() : { : std::string foo("bar"); : return foo;
|
t****t 发帖数: 6806 | 6 NRVO is in C++98 from the beginning, see 12.8 Clause 15.
【在 x****u 的大作中提到】 : 这个是C++0x特性吧。
|