函数使用const

函数使用const有两种情况

第一,const在函数名前面,如 const int getvalue(),前面使用const表示返回值为const,此时const修饰函数返回值

第二,const在函数名后面,这种函数称作“常函数”,如 int getvalue() const,后面使用const表示定义为只读函数,此时const修饰的是函数本身,表示函数不可修改成员变量的值,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理

1、非成员函数或静态成员(static)后面加const(加到非成员函数或静态成员后面会产生编译错误),因为静态成员函数不能有cv-qualifer(cv限定符),包括const,volatile和mutable

2、表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用)

3、唯一的例外是对于mutable修饰的成员。

加了const的成员函数可以被非const对象和const对象调用

但不加const的成员函数只能被非const对象调用,也就是说const对象只能调用const修饰的成员函数,而非const对象两者都可以调用

下面是一个const函数:

1
2
3
char getData() const{
return this->letter;
}

具体的实现可以看以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;

class FunctionConst {
private:
int value;
public:
FunctionConst() : value(100){

};
virtual ~FunctionConst() {

};
int getvalue() {
return value;
};
const int setvalue() {
this->value = 10;
return value;
}
int getvalue2() const {
// value = 15; //错误 只读成员函数不可修改成员变量的值
return value;
};
// static void fun1() const{ //错误,静态成员函数不能有cv-限定符
//
// };
};
int main() {
FunctionConst *test = new FunctionConst(); //非const对象
const FunctionConst *const_test = new FunctionConst(); //const对象
cout << test->getvalue() << endl; //输出100
cout << test->setvalue() << endl; //输出10
// const_test->getvalue(); //错误,getvalue()为非const成员函数
// const_test->setvalue(); //错误,setvalue()为非const成员函数
cout << const_test->getvalue2() << endl; //输出100,const对象可以调用const成员函数
return 0;
}
//int funtest() const { //错误,非成员函数不能有cv限定符
//
//};