- C++中const和static的用法
- const关键字
- const的最初动机是取代预处理器#defines来进行值替代,它可以被用于指针,函数变量,返回类型,类对象以及成员函数。
- const对象默认为文件的局部变量,要使其可以在其他文件被访问,需要显示指定为extern。
- 对于指针来说,可以指定指针本身为const,也可以指定指针所指向的数据为const,或者二者同时指定为const。
- 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。对于内部数据类型的输入参数,不要将“值传递”的方式改为“const 引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。
- static关键字
- 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此,其值在下次调用的时候仍然维持原始值。
- 在文件内的static函数只可以被这一文件内的其他函数调用,这个函数的使用范围被限制在声明它的文件内,即具有文件作用域的特点。
- const和static在类中使用
- const关键字
- const修饰类的成员常量,不能被修改,同时它只能在初始化列表中赋值初始化。
- const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。
- const成员函数可以访问非const对象的所有数据成员,也可以访问const对象内的所有数据成员。
- 非const成员函数可以访问非const对象的所有数据成员,但不可以访问const对象的任意数据成员。
- static关键字
- 所有类对象共享一个static类成员,static类对象必须要在类外进行初始化。
- 由于static修饰的类成员属于类,不属于对象,因此static类成员函数是没有this指针的,this指针是指向本对象的指针。正因为没有this指针,所以static类成员函数不能访问非static的类成员,只能访问static修饰的类成员。
- 静态成员函数在创建对象前就可以使用了,非静态方法必须通过对象调用。
- C++里的静态成员函数不能用const、volatile的原因
- static成员不是任何对象的组成部分,所以static成员函数不能被声明为const,毕竟,将成员函数声明为const就是承诺不会修改该函数所属的对象。最后,static成员函数也不能被声明为虚函数。
本系列文章目的为个人准备面试的简单总结,文中多有不足,敬请批评指正!