在 setter 函数内调用 getter 与直接访问数据成员

Calling getters inside a setter function vs direct access to data members

问题很简单:访问对象的成员变量是否不需要在setter中调用getter?假设所有的getter都是inlined和return const成员的引用。

举个例子:

class Foo
{
public:
    inline const std::uint32_t& getValue( ) const noexcept
    {
        return m_value;
    }

    inline const std::uint32_t& getBar( ) const noexcept
    {
        return m_bar;
    }

    void setValue( const std::uint32_t value )
    {
        m_value = value * getBar() * 3; // vs m_value = value * m_bar * 3;
    }

private:
    std::uint32_t m_value;
    std::uint32_t m_bar;
};

哪个更地道?我认为编译器生成的代码应该没有区别。但就可读性而言,它们有点不同。使用 getter 而不是直接输入的好处是什么? m_bar?

class 中的代码始终具有对内部数据成员(以及成员函数)的完全访问权限。所以没有必要。我对你是否应该这样做的看法

  • 如果 getter 尤其是 setter 有副作用(假设您计算某个特定值被更改或验证一个值的次数),那么您应该调用它们
  • 编译发布时的开销将消失,因为编译器可以看到您只是在读取或写入值(如果它们是简单的读写 get/set)
  • 你可能会养成总是打电话给他们的习惯,以防你以后希望他们有副作用

注意我没有说什么 'best',只是要考虑的事情