VC++ 6.0中Const的有关问题

VC++ 6.0中Const的问题
请问
const   int   add()
{
      ....
}  

int   add()
{
      .....
}
这两个函数的定义有什么区别?

------解决方案--------------------
const int add()修饰返回值,返回值不能改变
int add()返回值可以改变

const int add(){return 2;}
int n = add;
n++;//error
------解决方案--------------------
修饰返回值的const,如const A fun2( ); const A* fun3( );
这样声明了返回值后,const按照 "修饰原则 "进行修饰,起到相应的保护作用。

const Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational(lhs.numerator() * rhs.numerator(),lhs.denominator() * rhs.denominator());
}
返回值用const修饰可以防止允许这样的操作发生:

Rational a,b;Radional c;(a*b) = c;

一般用const修饰返回值为对象本身(非引用和指针)的情况多用于二目操作符重载函数并产生新对象的时候。

一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。

原因如下:

如果返回值为某个对象为const(const A test = A 实例)或某个对象的引用为const(const A& test = A实例) ,则返回值具有const属性,则返回实例只能访问类A中的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少用到。