C++面试常见题目2_const 与 static

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

 

本系列文章目的为个人准备面试的简单总结,文中多有不足,敬请批评指正!

参考:

https://blog.csdn.net/u010182186/article/details/52671853

https://www.cnblogs.com/JiFfeiYu/p/6697195.html

猜你喜欢

转载自blog.csdn.net/zzhang_12/article/details/81011868