C++中static关键字和const关键字注意事项

C++中static关键字和const关键字注意事项

  • 1. static关键字
    • 1.1 class中的static成员变量
    • 1.2 class中的static成员函数
  • 2. const关键字
    • 2.1 指针常量与常量指针
    • 2.2 常量成员函数

1. static关键字

  • static关键字主要用于指定entity的生存周期:变量定义直至程序结束
  • 一个static变量只会被定义一次,之后就是对该entity的访问。对static变量的二次定义是非法的。
  • static关键字只在声明时使用,实际定义时无需static修饰

1.1 class中的static成员变量

  • 不能在任何函数中定义,只能以全局变量的方式定义。
  • 不能用对象定义,只能以Test::variable的方式定义。
  • 不与任何对象绑定,只和对应类绑定,对于一个类而言,它的所有对象访问的static成员变量都是相同的。即一个static成员变量在所有同类对象中共享相同副本。
  • 不能被对象初始化(定义),但可以被对象操作,static成员变量无法被constructor初始化,故一般将对其的定义和初始化操作放在类体之外。
  • 与访问权限等其它属性互不影响

1.2 class中的static成员函数

  • 可以在类内定义
  • 不具有this指针,不能通过this指针访问变量(this指针是和对象绑定,而static成员函数只和类绑定
  • 不能访问非static成员
  • 只能在定义中用static修饰,若定义和声明分离,则声明不能用static修饰

2. const关键字

2.1 指针常量与常量指针

  • 常量(的)指针:int const* p = &a;const int* p =&a;,不可以通过该指针来修改指针指向的内存,但若a本身在声明时不是以const来声明的,则可以通过其它方式(如直接操控变量)的方式来修改a。
    记忆方式:const距离int比距离p更进

  • 指针(是)常量:int* const p = &a;,除了定义(初始化)时,不可以修改p本身。

2.2 常量成员函数

  • 常量成员函数:void Test::test()const{...}其内部不能修改任何成员变量。一般对getValue()类型的函数使用常量成员函数来修饰。
  • 常量成员函数在声明和定义时都需要用const来修饰。
  • 非类内成员函数不能是常量函数
  • const成员函数不能在函数中调用其他非const 的函数

你可能感兴趣的:(C/C++,c++,static,静态变量,const)