有效使用功能输出

时间:2015-11-02 05:08:31

标签: c++ c++11

过去几周我一直在尝试学习C ++,并对良好实践提出疑问。

让我们说我有一个会产生一些物体的功能。定义函数以生成类型对象的输出是否更好,或者最好将函数作为参数传递给对象指针,以便它可以直接修改它?

我认为这个答案取决于场景,但我很好奇效率如何发挥作用。当将对象作为参数传递给函数时,我知道使用const引用更有效,这样函数可以立即访问对象而无需生成副本。

在输出功能结果时,这种效率问题会发挥作用吗?

4 个答案:

答案 0 :(得分:7)

以下内容:

MyType someFunc()
{
    MyType result;
    // produce value here
    return result;
}

像这样使用:

MyType var = someFunc();

不会复制,也不会移动,而是RVO。 这意味着它无论如何都无法提高效率,而且确实如此 也很容易阅读,和难以使用的错误Don't help the compiler

答案 1 :(得分:0)

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

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

这比将对象的指针作为参数传递更简洁,并且可能更直观一些。

答案 2 :(得分:0)

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

我发现最好先将所有内容作为常量指针传递,然后返回并根据需要进行更改。这可以确保您真正了解代码的结构。

答案 3 :(得分:0)

作为最佳实践,通常具有易于阅读的代码是最重要的因素。看看哪种方法使代码块更容易阅读并以这种方式进行。在大多数情况下,the answer by sp2danny是最明显的。

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