//这个函数中这几个const的意义分别是什么
const A *const fun(const A* const one)
{
return one ;
}
上面函数中这几个const的意义分别是什么呢?(注:A是一个类)
1、fun函数中的参数列表中的const:const A* const one
这个的意思是:one前面的const表示指针one是一个常量指针,其值是不改变的(就是其存放的地址值是不可改变的)。A前面的const表示常量指针one指向的对象是不可改变的。即常量指针one指向的常量对象。
2、函数名fun前面的const的意义:const A*const
*号后面的const表示函数fun返回的指针one的值是不可改变的,即指针所存储的地址是不可改变的。A前面的const表示的意思是函数fun返回的常量指针one指向的对象是不可能改变的。
上面这样做的目的是:
保证了传递进来的数据不会被修改,同时又保证了返回的数据也不会被修改。同时,也是为了实现按值传递的保护机制,且又避免按值传递的开销,比如拷贝构造函数和析构函数的调用,这里就不会调用了。
A a ;
a.setA(11) ; //类A的成员函数,因为a不是常量对象,所以其值是可以改变的
const A* const p = fun(&a) ;
p++ ; //错误:p是常量指针,其实p存放的地址值是对象a的地址
p->setA(12) ; //错误:常量指针p指向的对象是不可修改的
还有一点特别注意:
指向常量的常指针,它指向的对象是不可修改的。这里的不可修改是相对的。怎么说是相对的呢?指向常量的长指针,只是限制我们不可使用该指针来修改它所指向的对象。不能说该对象是不可改变的,我们可以通过其他的方式修改。也就是说它不会改变原始对象的属性。比如:原始对象不是常量对象,所以我们可以通过其他的方式来修改对象。例如:
A a ;
const A* const p = fun(&a) ;
a.setA(11) ; //正确:允许。因为对象a不是常量对象
p->setA(11) ; //错误:不可以通过指针p来修改其指向的对象

被折叠的 条评论
为什么被折叠?



