這有什么區別:
function1(function2());
和這個:
var1 = function2();
function1(var1);
在效率或其他方面,最好的選擇是什么?
uj5u.com熱心網友回復:
在 C 11 之前沒有大的區別。由于引入了移動語意,因此差異可能很大。當一個函式需要復制其引數時,它可以有兩種多載:一種是實際復制,另一種是當引數是臨時的時可以移動:
#include <iostream>
struct bar {};
bar b() { return {};}
struct foo {
bar b;
void set(const bar& in) {
std::cout << "copy \n";
b = in;
}
void set(bar&& in){
std::cout << "no need to copy, can move\n";
b = std::move(in);
}
};
int main() {
foo f;
bar b1;
f.set(b1);
f.set(b());
}
bar在這個例子中只是一個輕量級的類,但是當它移動便宜但復制成本高時,f.set(b1)效率低于f.set(b()). 呼叫者可以f.set(std::move(b1)),但呼叫f.set(b())比讓物件移動更清晰。
但是,在 C 11 之前,您實際上應該問的問題是:為呼叫的結果命名是否有意義function2?您只需要呼叫結果function1還是在其他地方也需要結果?這可以獨立于您是否正在撰寫古老的 C 或是否涉及移動語意來回答。簡而言之:撰寫清晰易讀的代碼。對效率的關注是在稍后的階段,當您擁有可以衡量和分析的正確且有效的代碼時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/329352.html
