保持const和non-const函数代码的一致

     在用C++进行面向对象编程的时候,有时需要在一个类里包含两个代码相似的函数,而它们之间的唯一区别是,一个为const类型,一个是non-const类型。

     此时如果将相同的代码写在两个函数中,则严重违反了DRT(Don't repeat yourself)原则。正确的做法是:让non-const函数引用const函数,如下所示:

class Sample
{
public:
	const char& doSomething()const
	{
		//there is some code to do
	}
	
	char& doSomething()
	{
		return const_cast<char&>  
		(static_cast<const Sample&>(*this).doSomething());
	}			
};

  在non-const的doSomething函数中,如果我们直接在里面调用doSomething函数,则编译器会默认你调用的是non-const版本的,那么程序就会陷入永无终止的递归中。为了防止这一点,应当首先利用static_cast操作符将该类的实例转化为const类型,此时再调用doSomething就是const的版本了。然后因为最终要返回non-const的char的引用类型,因此还需要用const_cast消除掉变量的const特性。这样一来,虽然代码的形式会比较丑陋,但实现了对代码重复利用的目标。

原文地址:https://www.cnblogs.com/wickedpriest/p/5451342.html