Effective C++ Item 3 ——尽可能使用const;const成员函数如何改变类的成员变量
C++ const
一、 语义约束
一个特定的对象不应该被修改,即是只读的。
二、用法
1. 修饰全局范围或命名空间内的静态对象
2. 修饰类的静态或非静态成员
3. 修饰指针或指针指向的数据
- const出现在星号左边,则指针所指的内容为只读的。
- const出现在星号右边,则指针自身为只读的。
- const在星号左右均出现,则两者均为只读的。
4. 修饰迭代器
5. 修饰函数返回值
6. 修改类的成员函数
在函数声明后添加const,表示其为类的const成员函数,该函数不能修改类的任何非静态成员变量,但不是所有的成员变量都不能修改,总结如下:
- 不能改变类的非静态成员变量。
- 可以改变类的静态成员变量。
- 可以改变类的被mutable修饰的成员变量。
#include <bits/stdc++.h>
using namespace std;
struct Test{
mutable int a;
static int b;
Test(int a):a(a){
}
int getA() const{
Test::b = 2;
a = 2;
return a;
}
};
int Test::b = 1;
int main(){
Test test(1);
cout<<test.getA()<<endl;
cout<<Test::b<<endl;
return 0;
}
// 2
// 2