class A
{
...
public:
shared_ptr<Logger> GimmeLogger() const
{
return m_logger;
}
private:
shared_ptr<Logger> m_logger;
};
在class A
,應該GimmeLogger
是const
或非const
?應該在語義上還是語法上使用「const」?
因爲它是一個簡單的getter,它不會修改*this
(句法const
),所以它應該是const
。
但是另一方面,它返回一個非const
指針到它擁有的另一個對象(語義非const
)。
而不是'm_logger'是'shared_ptr'? –
Scott Mayers書(Effective C++)第21項對'const'進行了一次有趣的討論。如果你正在編程C++,這本書很值得一讀。基本上,儘可能使用'const'並使用擺動室。 –
您是否特別詢問伐木者或一般的「擁有」物品?如果不從函數式編程的角度深入研究monad的概念,那麼考慮一個記錄器可能是數據拋出而不真正改變其狀態的東西,這可能是合理的。因此,沒有理由不應該使用屬於const對象的記錄器。 –