copy elision
05 Jun 2019
|
|
Why
这是参考链接中ppt的总结
copy elision到底做了什么
RVO 返回值优化
这个在copy elision之前就有的优化,copy elision算是大一统理论?
简单说
std::string f(){
...
std::string a;
...
return a;
}
这里的a不会在stack上分配空间,而是直接放到返回值那个地址上。
Argument Passing 参数传递优化
在copy elision之前,传值的赋值就是复制,直接拷贝一份,有了copy elision,直接折叠掉
注意,产生条件只是右值,左值不会省略。因为左值地址不能直接用。
void f(std::string a){
...
int b{23};
...
return;
}
void g(){
...
f(std::string{"A"});
...
}
这里原本是为这个临时变量在当前栈生成一个然后压栈再生成一个,直接折叠复用同一个。
ref
- https://github.com/boostcon/cppnow_presentations_2018/blob/master/lightning_talks/copy_elision__jon_kalb__cppnow_05092018.pdf