const
const 后边的值不可改变
const变量需要在定义时初始化或在初始化列表中赋值
- const变量默认为文件的局部变量, 因此要在其他文件中访问,必须在文件中显示指定为extern
- 非const变量在不同文件中的访问(默认为extern)
1
2
3
4file1.cpp
int ext;
file2.cpp
extern int ext; - const变量在不同文件中的访问
1
2
3
4file1.cpp
extern const int ext = 10; // 定义时必须初始化
file2.cpp
extern const int ext;
- 非const变量在不同文件中的访问(默认为extern)
- const和指针
- point to const: 指向的对象是const, const在*左边
- 可以将非const对象或const对象的地址赋给指向const对象的指针,不能通过const对象指针来修改值,可以通过其他的指针来修改
1
2
3const int p = 10; or int p = 10;
const int *ptr;
ptr = &val;
- 可以将非const对象或const对象的地址赋给指向const对象的指针,不能通过const对象指针来修改值,可以通过其他的指针来修改
- const pointer: 常指针,const在*右边
- const指针必须进行初始化,且指针的值不能修改
- const指针不能指向const常量
- 可以通过非const指针来修改变量的值
1
2const int num = 0;
int * const ptr = # // error!! const int* -> int *
- const指针point to const对象
const int p = 10; const int * const ptr = &p;
- point to const: 指向的对象是const, const在*左边
- const的使用: reference
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
33class A
{
private:
const int a; // 常成员变量,只能在初始化列表赋值
public:
A(int x = 0) : a(x) {};
// const可以对重载函数区分
int getValue(); //普通成员函数
int getValue() const; // 常成员函数,不得修改类中任何成员的值
};
void func()
{
// 对象
A b; // 普通对象,可以调用全部成员函数,更新常成员变量
const A a; // 常对象,只能调用常成员函数
const A *p = &a; // 指向常对象的指针
const A &q = a; // 指向常对象的引用
// 指针
char h[] = "hello";
char* p1 = h; // 指针变量,指向字符串变量
const char* p2 = h; char const* p2= h; // 指针变量指向常对象
char* const p3 = h; // 常指针指向变量
const char* const p4 = h; // 常指针指向常对象
// 函数
void f1(const int var); // 传递的参数在函数内不能改变
void f2(const char* var); // 参数指针所指内容为常量
void f3(char* const var); // 常指针
void f4(const int& var); // 引用的参数为常量
}
// 函数返回值
const int f5(); // 返回一个常数, 实际没有什么意义
const int* f6(); // 返回指向常对象的指针,const int* p = f6();
int* const f7(); // 返回常指针,int* const p = f7();