对象引用与方法的Void返回类型

Xpl*_*ane 9 c++

我正在查看一些开源源代码,我注意到对于某些方法,而不是使用void作为返回类型,他们使用了对该类的引用.

例:

class Object
{
private:
    float m_x;
public:
    Object();
    Object& setX(float x)
    {
        m_x = x;
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

通常,我会写这样的函数:

class Object
{
private:
    float m_x;
public:
    Object();
    void setX(float x)
    {
        m_x = x;
    }
};
Run Code Online (Sandbox Code Playgroud)

使用一个优于另一个是否有任何优势?

use*_*027 8

是的,返回引用有一些优点.返回引用时,您可以继续处理返回的引用并将多个函数调用链接在一起.例如,如果还有一个setY函数,你可以这样做:

object.setX(5).setY(10);
Run Code Online (Sandbox Code Playgroud)

返回引用并没有真正的缺点,但允许一些好的东西.它可用于创建流畅的接口,如果需要,可以解决C++中缺少命名参数的问题.

相关读物:

  • 这种风格被称为["方法链"](http://en.wikipedia.org/wiki/Method_chaining)或["流畅的界面"](http://martinfowler.com/bliki/FluentInterface.html). (5认同)