在C++里,const可用来修饰变量或者指针,从而使该变量或指针的值无法改变,一般来讲,const作用有下面几点:
①定义const变量,从而使变量值只可读
②定义const指针,从而使指针无法指向其他指针(注意const int*a,int const*a,int*const a的区别)
③在类中定义const成员函数,从而使对象的值无法被修改,同时也为const 对象提供了接口。
④在类中用来重载,对于两个相同参数表的函数,const的修饰可以作为重载的依据。
看下面一段代码
最终输出的将是2。
当然这很让人疑惑,学过C++的人都知道,如果参数表相同,返回值是无法作为重载依据的,因为编译器不知道调用者想调用的是哪一个函数。同样,如果良个成员函数只有const与非const的区别,编译器如何知道调用者想调用哪个函数?我自己想到的解释是,如果一个成员函数用了const重载。非const对象会优先调用非const的成员函数,而对于const对象则只能调用const的成员函数。具体规则如下:
对象.成员函数
对象 成员函数 对/错
1、 const const 对
2、 const non-const 错
3、 non-const const 对
4、 not-const non-const 对
成员函数调用成员函数
成员函数 成员函数 对/错
5、 const const 对
6、 const non-const 错
7、 non-const const 对
8、 non-const non-const 对
但是如果用const重载了一个成员函数,如何使用一个非const对象调用const函数??想不出。。。