文章目录
- const
- static
- this指针
const
作用:
- 修饰变量,变量不可改变:const int var1即常量,更推荐使用const而不是以#define定义常量,因为const可以指定常量类型,而define仅仅是符号替换。
- 修饰指针,分为两种情况:
(1)const
在*
前,const int * p1
,int const * p2
两者等价,都是说不能通过* p
来修改所指向的变量的值。
(2)const
在*
后,int * const p
, p一经指定,就不能指向其他变量。这个和C++的引用&
非常像。都需要初始化指定,并且一旦指定就不能修改(但是赋值的方式完全不同)。
复制代码
1
2
3
4
5int a = 0; int b; int* const p = &a; int &c = b;
- 修饰函数
(1)修饰普通函数
如:const int fun(){}
,代表返回一个常量。需要用一个常量接收
同理:const int * fun(){}
需使用const int *
指针接收
int const * fun(){}
需使用int const *
指针接收
(2)在类中修饰成员函数
这个有点特殊,用于类的成员函数。代表这是一个常成员函数,不得修改类中的任何数据成员的值。造成这一特性的根本原因是:this指针
this 指针是一个隐含于每一个非静态成员函数中的特殊指针。在类中,this 指针被隐含地声明为:ClassName *const this
,这意味着不能给 this`指针赋值;而在ClassName
类的const
成员函数中(如下示例:int getValue() const;
),this 指针的类型为:const ClassName* const
,这说明不能对this
指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14class A { private: const int a = 20; // 常对象成员,只能在初始化列表赋值 public: // 构造函数 A() : a(0) { }; A(int x) : a(x) {}; // 初始化列表 int getValue() const; // 常成员函数,不得修改类中的任何数据成员的值 }
- 修饰引用
(1)指向常量的引用(reference to const)
这个一般用于函数传参,引用参数在函数内为常量
void function4(const int& Var);
(2) 没有 const reference,因为引用本身就是 const pointer
这个就是类似int * const p。这是C++引用的特性。引用被创建时候必须初始化,指定一个同类型的变量(或函数等)。二者可以被视为等价,即可使用引用操作原变量。
static
作用
- 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。
- 修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。
- 修饰成员变量,修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。
- 修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23class A { private: const int a = 20; // 常对象成员,只能在初始化列表赋值 static int n; public: int c = 20; // 构造函数 A() : a(0) { }; static int getN(); }; int A::getN() { n++; // c ++; 错误,不能操作非静态成员 // return a; // return c; return n; }
this指针
- this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向调用该成员函数的那个对象。
- 当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都隐式使用 this 指针。
- 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
- this 指针被隐含地声明为:
ClassName *const this
,这意味着不能给 this 指针赋值;在 ClassName 类的 const 成员函数中,this 指针的类型为:const ClassName* const
,这说明不能对 this 指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作); - this 并不是一个常规变量,而是个右值,所以不能取得 this 的地址(不能 &this)。
在以下场景中,经常需要显式引用 this 指针:
(a)为实现对象的链式引用;
(b)为避免对同一对象进行赋值操作;
(c)在实现一些数据结构时,如 list。
最后
以上就是勤奋大叔最近收集整理的关于C/C++ 中const && static && this指针conststaticthis指针的全部内容,更多相关C/C++内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复