forked from hengqiali/AwesomeCpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
const、底层和顶层
81 lines (56 loc) · 3.5 KB
/
const、底层和顶层
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <fstream>
using namespace std;
/*******************************************************
C++ const与指针
1. 当const在*的前面时,允许修改指针p的位置,而不允许修改*p的值
2. 当const在*的后面时,指针p不能变,*p可以变
3. 当const在*的前后都有时,指针p不能变,*p也不可以变
4. 顶层const表示const定义的变量本身是个常量, 底层const表示定义变量所指对象是一个常量
https://www.jianshu.com/p/fbbcf11100f6
http://wangwlj.com/2018/01/06/CPP_06/
C++ const与成员函数
https://www.cnblogs.com/wintergrass/archive/2011/04/15/2015020.html
https://blog.csdn.net/audience_fzn/article/details/80455236
const放在返回值类型前面修饰返回值为常量,放在函数后面修饰该函数为常量函数。
在类中将成员函数修饰为const,const修饰this指针指向的对象,这也就保证调用这个const成员函数的对象在内部不会被改变
表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。
为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,
所以在const成员函数内只能调用const函数
众所周知,在相同参数及相同名字的情况下,const是可以构成函数重载的,但const成员函数不能更改任何非静态成员变量;
类中二函数都存在的情况下:
const对象默认调用const成员函数,非const对象默认调用非const成员函数;
若非const对象想调用const成员函数,则需显式转化,如(const Student&)obj.getAge();
若const对象想调用非const成员函数,同理const_cast<Student&>(constObj).getAge();(注意:constObj要加括号)
类中只有一函数存在的情况下:
非const对象可以调用const成员函数或非const成员函数;
const对象只能调用const成员函数,直接调用非const函数时编译器会报错;
1)const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;
2)非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员;
3)作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const 成员函数。
*******************************************************/
int main()
{
double num = 8;
const double *p = # //当const在*的前面时,允许修改指针p的位置,而不允许修改*p(即num)的值,等价于double const *p = &num
cout << p << endl;
p++;
cout << p << endl;
//*p = 5;
//cout << *p << num << endl;
double num2 = 10;
double* const p2 = &num2; //当const在*的后面时,指针p不能变,*p可以变
cout << p2 << endl;
//p2++;
//cout << p2 << endl;
*p2 = 3;
cout << *p2 << num2 << endl;
double num3 = 5;
const double* const p3 = &num3; //当const在*的前后都有时,指针p不能变,*p也不可以变
cout << p3 << endl;
// p2++;
//cout << p2 << endl;
//*p3 = 3;
//cout << *p3 << num3 << endl;
return 0;
}