在C++primer第五版P248頁
class Screen{
public:
? ? Screen &display( std::iostream &os )
? ? {
? ? do_display(os);?
? ? /**some unique part for non-const display**/;
? ? return *this;
? ?}
? ?const Screen &display( std::iostream &os ) const
? ?{
? ? do_display(os);
? ? /**some unique part for const display**/;
? ? return *this;
? ?}
}
private:
? void do_display(std::iostream &os) const {/***/};
}
之前的疑惑是為什么要定義兩個不同版本的display,一個const 一個是非const,它們看起來完成的工作差不多。編譯器為什么不幫我們優化? 以下為個人觀點
ANS: 我覺得,如果說兩個不同版本的display如果做相同的事情,那只需要定義一個const 版本的就行了,非const對象和const對象都可以調用const版本的函數。既然定義了兩個,它們肯定是有區別的。
而上述代碼,正在是告訴我們如果有區別,怎么去從兩個不同版本的函數中提取出common的方法,簡化代碼。所以歸根結底就是編譯器沒必要給我們做這件事兒
1) 要是沒區別我覺得定義一個const 版本就行了(感覺現在大多數工程里頭都是這么做的,該const 的函數就const ,這個函數如果不必須需要一個const 版本那就沒必要要再寫一個非const 版本)。
2) 要是有區別,用上述方法, 提取出common的代碼放在一個const 函數里面 (如do_display),簡化代碼又好維護。