c++:何时传递指针与返回对象
c++: When to pass pointers versus returning objects
我刚刚开始使用c ++,我想知道是否有一些关于何时执行以下操作的指南:
假设我想返回一个结构或对象。在什么情况下,哪种方法会更好?
void PopulateStruct(MyStruct* struct) {
struct->a = x;
struct->b = y;
}
void Caller() {
MyStruct s;
PopulateStruct(&s);
}
或:
MyStruct PopulateStruct() {
MyStruct s;
s.a = x;
s.b = y;
return s;
}
void Caller() {
MyStruct s = PopulateStruct();
}
我的基本理解是,如果结构/对象非常小,那么后一种选择可能很好(更好?(,因为复制会很快,编译器也可能使用 RVO 来避免实际复制。
也许如果对象真的很大,那么你希望前者避免那个副本?
根据Herb Sutter和Bjarne Stroustrup的CppCore指南,第二个例子是推荐的方法。它使代码推理更容易,并且在某些情况下不会强制您创建未初始化的对象。
见准则F.20。
返回值是自我记录的,而 & 可以是 in-out 或 out-only,并且容易被滥用。
在现代编译器中,返回对象可以使用移动语义来完成,即使没有移动语义也足够快。
这取决于您是希望应用范围销毁,还是希望程序员处理要返回的对象的所有权。
相关文章:
- 如何返回对象C++的数组
- 如何使用std::min和std::less返回对象
- 如何通过引用返回对象
- 如何安全地从 DLL 调用返回对象
- 如何在不销毁对象的情况下返回对象列表
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 使用返回对象的函数处理错误
- 何时返回指针与返回对象的一般经验法则?
- 如何使用运算符+重载函数正确返回对象?
- C++,class,一个返回对象的函数
- 运算符的返回对象 = C++ 中的重载
- 从队列返回对象的最快方法,但前提是队列有它
- 如何使用条件表达式返回对象指针?
- 使用构造函数从函数返回对象
- 隐式转换函数的返回对象时是否会影响性能?
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 按值和堆栈大小限制返回对象
- 我应该如何从函数返回对象?
- c++:何时传递指针与返回对象
- 返回对象会丢失属性