首页 > 解决方案 > 在这种情况下哪个更有效:通过引用返回成员,还是作为指针返回?

问题描述

例如,我有一个使用 Eigen 库的类,如下所示:

class A
{ 
    private: 
    Eigen::MatrixXd _matrix; 
    public: 
    Eigen::MatrixXd GetMatrix() const; 
}

GetMatrix() 现在是这样实现的:

Eigen::MatrixXd A::GetMatrix() const 
{
   return _matrix; 
}

假设在 main.cpp 中,我有一个执行以下操作的函数:

void PrintMatrix(const Eigen::MatrixXd &matrix)
{
   std::cout<<"Print matrix: "<<matrix<<std::endl; 
}

int main()
{
     A obj; 
     PrintMatrix(obj.GetMatrix()); 
     return 0; 
}

在 GetMatrix() 函数中,我的目标是返回 _matrix 值,它将用于 main() 中。我想要最有效的方法。

我是优化新手,刚开始热身指针。正如你们所看到的,GetMatrix() 当前返回一个值,我知道按引用返回和按指针返回比按值返回要快得多,但是这样做的风险/利弊是什么?两者中哪一个更适合我的情况?

标签: c++performanceclasspointersreference

解决方案


在你的情况下,我会有一个带有签名的方法:

const Eigen::MatrixXd& GetMatrix() const noexecpt;

编译器将使用最合适的可用方法。在您的情况下,因为您的 print 函数将 const 引用作为参数,所以将自动使用引用版本。

现在我使用关键字 noexcept 作为公共方法。这告诉客户端不需要异常处理。有时编译器可以为此进行优化。

对于优化原型,我强烈推荐: https : //godbolt.org/ 那里还有 Quick-bench 和 CppInsights 工具的链接。

我只需要给你一个 Youtube 演讲的 const 参考:Jason Turner “Rich Code for Tiny Computers


推荐阅读