我刚刚开始使用c ++,我想知道是否有关于何时执行以下操作的指南:
假设我想返回一个结构或对象。在什么情况下哪种方法会更好?
|
OR:
void PopulateStruct(MyStruct* struct) {
struct->a = x;
struct->b = y;
}
void Caller() {
MyStruct s;
PopulateStruct(&s);
}
我的基本理解是,如果struct / object非常小,那么后一个选项可能没问题(更好?),因为副本速度很快,编译器也可能使用RVO来避免实际复制。
也许如果对象真的很大,那么你想让前者避开那个副本吗?
答案 0 :(得分:1)
根据Herb Sutter和Bjarne Stroustrup的CppCoreGuidelines,第二个例子是推荐的方法。它使代码的推理更容易,并且在某些情况下不会强迫您创建未初始化的对象。
参见指南 F.20 。
返回值是自我记录的,而&可以是进出也可以是外出,并且可能被滥用。
答案 1 :(得分:0)
在现代编译器中,返回一个对象可以用移动语义来完成,即使没有移动语义,它也足够快。
这取决于您是否希望应用范围销毁,或者您希望程序员处理您要返回的对象的所有权。