我们经常见到一些函数后面带有关键字 const 的修饰。那么 const 在这里表示什么意思呢?
其实这个 const 的是对函数的一个限定,使其无法修改类内的数据成员。const告诉别人这个函数不会改变对象的状态。
声明一个函数用 const 关键字来说明这个函数是一个只读函数(read only method),即不会修改任何的数据成员也就是不会改变该对象的状态。该类函数的声明和定义时都要加上 const 关键字。
任何不会修改数据成员的函数我们都应该声明为 const 类型。如果我们在编写 const 函数时不小心修改了数据成员,或者调用了其他非 const 成员函数(即会修改数据成员的函数),编译器将会报错。这无疑让我们编写的代码更加的健壮。看如下两端代码:
错误的写法:
#include <iostream>
using namespace std;
class Person
{
public:
Person(int age);
void setAge(int age);
int getAge() const;
private:
int age;
};
Person::Person(int age){
this->age = age;
}
void Person::setAge(int age){
this->age = age;
}
int Person::getAge() const{
this->age = 23; // wrong: want to modify data member, the compiler will report error
return this->age;
}
int main(){
Person person(13);
cout << person.getAge() << endl;
person.setAge(23);
cout << person.getAge() << endl;
}
编译器所报错误:
Cannot assign to non-static data member within const member function 'getAge'
正确的写法:
#include <iostream>
using namespace std;
class Person
{
public:
Person(int age);
void setAge(int age);
int getAge() const;
private:
int age;
};
Person::Person(int age){
this->age = age;
}
void Person::setAge(int age){
this->age = age;
}
int Person::getAge() const{
return this->age;
}
int main(){
Person person(13);
cout << person.getAge() << endl;
person.setAge(23);
cout << person.getAge() << endl;
return 0;
}
运行结果:
13
23
Program ended with exit code: 0
网友评论