过去几周我一直在尝试学习C ++,并对良好实践提出疑问。
让我们说我有一个会产生一些物体的功能。定义函数以生成类型对象的输出是否更好,或者最好将函数作为参数传递给对象指针,以便它可以直接修改它?
我认为这个答案取决于场景,但我很好奇效率如何发挥作用。当将对象作为参数传递给函数时,我知道使用const引用更有效,这样函数可以立即访问对象而无需生成副本。
在输出功能结果时,这种效率问题会发挥作用吗?
答案 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是最明显的。
如果您的项目速度具有最高优先级,那么请测试所有可能的方法,看看哪个更快。因为很可能你的代码比调用单个函数和获取对象更复杂,并且可能还有一些其他函数也与该对象交互。因此,您应该在尝试提高速度时考虑整个代码。