我用C++剛剛開始,我想知道,如果有一些指導各地時,做到以下幾點:C++:當通過指針回訪對象
比方說,我想返回一個結構或對象。在哪些情況下,哪種方法會更好?
void PopulateStruct(MyStruct* struct) {
struct->a = x;
struct->b = y;
}
void Caller() {
MyStruct s;
PopulateStruct(&s);
}
OR:
MyStruct PopulateStruct() {
MyStruct s;
s.a = x;
s.b = y;
return s;
}
void Caller() {
MyStruct s = PopulateStruct();
}
我基本的理解是,如果結構/對象是非常小的,則後一種選擇可能是罰款(更好?),因爲副本將是快速和編譯器也說不定使用RVO來避免實際複製。
也許如果對象真的很大,那麼你希望前者避免該副本?
如果現代編譯器沒有在每個可用的機會中利用RVO和NRVO,我會感到驚訝。所以在這方面,我認爲後一種方法在語義上更合理和可以理解。 – CoryKramer
[返回值優化](http://en.cppreference.com/w/cpp/language/copy_elision)現在在許多情況下是強制/隱含的。 –
可能的重複:https://stackoverflow.com/questions/33994995/which-is-more-efficient-return-a-value-vs-pass-by-reference – NathanOliver