一、函数后加const的意义
类的成员函数中,有一些是不改变类的成员变量的,也就是说,这些函数是"只读"函数。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。
实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。
- 非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误)
- 表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中, 任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);
- 唯一的例外是对于mutable修饰的成员。 加了const的成员函数可以被非const对象和const对象调用 但不加const的成员函数只能被非const对象调用
char getData() const { return this->letter;}
二、const在函数前后的作用
-
前面使用const 表示返回值为const
-
后面加 const表示函数不可以修改class的成员
三、示例代码
// test1107.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class aa{
int num;
public:
aa(){
int b =10;
num = b;
};
void out1(){
cout<<num<<endl;
}
void out2() const{
cout<<num<<endl;
}
void out3() const{
num+=10; //出错,const函数不能修改其数据成员
cout<<num<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
aa a1;
a1.out1();
a1.out2();
a1.out3();
const aa a2;
a2.out1(); // 错误,const的成员 不能访问非const的函数
a2.out2();
a2.out3();
return 0;
}