有效地使用函数输出 过去几周我一直在尝试学习C++,并且对好的实践有一个问题。

有效地使用函数输出 过去几周我一直在尝试学习C++,并且对好的实践有一个问题。,c++,c++11,C++,C++11,假设我有一个函数,它将产生一些对象。定义函数以生成object类型的输出更好,还是将对象指针作为参数传递给函数以便它可以直接修改它更好 我想这个答案取决于场景,但我很好奇效率是否起作用。当将对象作为参数传递到函数中时,我知道使用const reference更有效,这样函数就可以直接访问对象,而无需生成副本 在输出函数结果时,这种效率考虑是否起作用?您可以从函数返回创建的对象作为指针或共享指针。这对于立即检查返回值非常有用 std::shared_ptr<Object> Create

假设我有一个函数,它将产生一些对象。定义函数以生成object类型的输出更好,还是将对象指针作为参数传递给函数以便它可以直接修改它更好

我想这个答案取决于场景,但我很好奇效率是否起作用。当将对象作为参数传递到函数中时,我知道使用const reference更有效,这样函数就可以直接访问对象,而无需生成副本


在输出函数结果时,这种效率考虑是否起作用?

您可以从函数返回创建的对象作为指针或共享指针。这对于立即检查返回值非常有用

std::shared_ptr<Object> CreateObject(int type)
{
   if (type == SupportedType)
       return std::make_shared<Object>();
   else
       return std::shared_ptr<Object>();
}
...
if (std::shared_ptr<Object> object = CreateObject(param))
   // do something with object
else
   // process error
std::shared_ptr CreateObject(int类型)
{
如果(类型==SupportedType)
返回std::make_shared();
其他的
返回std::shared_ptr();
}
...
if(std::shared_ptr object=CreateObject(param))
//用物体做某事
其他的
//过程错误
这比以参数形式传递对对象指针的引用更简洁,可能更直观。

如下:

MyType someFunc()
{
    MyType result;
    // produce value here
    return result;
}
这样使用:

MyType var = someFunc();
不会复制,也不会移动,而是。 这意味着它无论如何都无法提高效率,而且它是
也容易阅读,并且难以使用错误的

通过引用传递内容,您正在节省内存资源,这将阻止您在不需要时创建内容的副本


我发现最初将所有内容作为常量指针传递,然后返回并在需要时进行更改是一种很好的做法。这可以确保您真正了解代码的结构

作为最佳实践,拥有易于阅读的代码通常是最重要的因素。看看是什么方法使代码块更容易阅读,并按这种方式进行。在大多数情况下是最清楚的


如果对你的项目来说,速度是最高优先级的,那么测试所有可能的方法,看看哪一种更快。因为您的代码很可能比调用单个函数并取回一个对象更复杂,而且可能还有一些其他函数与该对象交互。因此,在试图提高速度时,应该考虑整个代码。

一般来说,按值传递。该语言允许删除副本并移动重对象,编译器可以很好地传播常量。相反,如果您传递引用或指针,编译器必须假设别名最差,并且受到的约束要大得多。当您说“按值传递”时,是否建议使用特定的输出定义函数?或者您是在建议函数输入参数也应该按值传递吗?使用T&function(T&T)的好方法,这样您将只传递引用,而不是在函数内部为输出分配内存,并且仍然可以使用函数输出。若要传递const引用,则需要在内部复制对象。我建议仅当所有权真正共享时才使用
std::shared\u ptr
。这似乎是
boost::optional