在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,它們看起來完成的工作差不多。編譯器為什么不幫我們優(yōu)化? 以下為個人觀點
ANS: 我覺得麻汰,如果說兩個不同版本的display如果做相同的事情,那只需要定義一個const 版本的就行了戚篙,非const對象和const對象都可以調(diào)用const版本的函數(shù)五鲫。既然定義了兩個,它們肯定是有區(qū)別的岔擂。
而上述代碼臣镣,正在是告訴我們?nèi)绻袇^(qū)別,怎么去從兩個不同版本的函數(shù)中提取出common的方法智亮,簡化代碼。所以歸根結(jié)底就是編譯器沒必要給我們做這件事兒
1) 要是沒區(qū)別我覺得定義一個const 版本就行了(感覺現(xiàn)在大多數(shù)工程里頭都是這么做的点待,該const 的函數(shù)就const 阔蛉,這個函數(shù)如果不必須需要一個const 版本那就沒必要要再寫一個非const 版本)。
2) 要是有區(qū)別癞埠,用上述方法状原, 提取出common的代碼放在一個const 函數(shù)里面 (如do_display),簡化代碼又好維護苗踪。