您的位置:首页 > 编程语言 > C语言/C++

C++成员函数末尾const关键字的作用

2011-09-02 14:30 627 查看
1> 尽管函数名和参数列表都相同,void foo( ) const成员函数是可以与void foo( )并存的,可以形成重载!

我们假设调用语句为obj.foo(),如果obj为non-const对象,则调用foo()。如果obj为const对象,则调用foo()const。另外要注意,假如没有提供foo()const,则const obj调用foo()将会报错。但假如是没有提供foo(),则non-const obj调用foo()const是完全没有问题的。也就是说,non-const对象可以调用const函数,但const对象不能调用non-const函数:-)

2> const关键字所起作用的本质,就是把隐藏着的默认的this指针参数,改成const类型。也就是说:

假如void foo( )函数被编译器改写为 void foo(T* pThis),则void foo( ) const将会被改写为void foo(const T* pThis) 。i.e. 在函数末尾添加一个const,就相当于在隐藏的this参数类型前加一个const.

这样做有两个效果,第一:编译器将不允许foo()const修改pThis指向的对象的成员。第二、const对象只能调用const成员函数,否则就会报错说把const T* 转化为T* 会丢失qualifier

----------------------------------

Only member functions declared as const can
be invoked for a class object that is const. The const keyword
is placed between the parameter list and the body of the member function. A const member function defined outside the
class body must specify the constkeyword in both its declaration and its definition. For example:
class Screen

{

public:

bool isEqual( char ch ) const;      // ... private:

string::size_type    _cursor;

string               _screen;      // ...

};

bool Screen::isEqual( char ch ) const

{     

return ch == _screen[_cursor];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: