問題很簡單:是否不需要在 setter 中呼叫 getter 來訪問物件的成員變數?假設所有的 getter 都是inlined 并回傳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 而不是直接輸入 eg 有什么好處m_bar?
uj5u.com熱心網友回復:
類中的代碼始終可以完全訪問內部資料成員(以及成員函式)。所以沒有必要。我對你是否應該這樣做的想法
- 如果 getter 和特別是 setter 有副作用(想象你記錄一個特定值被更改的次數,或者驗證一個值),那么你應該呼叫它們
- 編譯發布時的開銷將消失,因為編譯器可以看到您只是在讀取或寫入值(如果它們是簡單的讀取和寫入 get/set)
- 您可能會養成總是打電話給他們的習慣,以防萬一您以后希望他們產生副作用
注意我沒有說什么是“最好的”,只是要考慮的事情
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432203.html
上一篇:不能使用C 中尚未定義的類
