const & static 关键字

一、const 修饰符

1. const 修饰符在C++中除了表现出和C语言相同的特性外,还表现出一些与类相关的特性。

2. 在C语言中

  • 用 const 修饰符修饰的变量通常也被称为常量类型,但其实称为只读类型更准确,表明该变量不应该被修改。
  • 用 const 修饰符修饰的变量必须在定义时初始化,且仅能初始化一次。
  • const 常量可以被其他文件引用,但在被引用时常量不可被再次赋值。
  • 与宏定义相比,const 常量具有数据类型,只在初始化的时候分配一次内存,以后都不会再分配。编译器可以对后者进行类型安全检查,而对前者进进行字符替换,并且在字符替换时可能会产生意料不到的错误(边际效应)

3. 在C++中

  • const可以修饰成员变量,表示该成员变量在对象的生命周期内不可改变。类的const成员跟普通成员一样,但其不可被修改,且必须在构造对象时显式赋初值。
  • const可以修饰成员函数,防止在函数中意外的修改成员。
  • 使用const修饰入参表明不希望对该参数做出更改,因此不管是值传递还是引用传递,在函数体内对入参的任何修改都会报编译错误。

4. const变量存储特性

  • const全局变量存储在只读数据段,此时它表示的是一个常量。除此之外const变量跟非const变量存储的位置一致,因为const变量仅仅只是用来表示它是只读的,我不希望任何人改变它。
  • const全局变量在编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放。

 

二、static 修饰符

1. static 修饰符在C++中除了表现出和C语言相同的特性外,还表现出一些与类相关的特性。

2. 在C语言中

  • 用 static 修饰的全局变量用来修改访问权限,该变量只能在定义的源文件中被访问。
  • 用 static 修饰的局部变量用来修改生命周期,该变量同全局变量都存储在全局(静态)区。
  • 在头文件中定义的static 变量被在包含的源文件中当做不同的变量分别拷贝一份,就算该头文件已经被限制不可重复引用。此种做法是禁忌!!!

3.在C++中

  • static可以修饰类成员变量,表示这个变量属于类,既可以使用类名来访问,也可以使用对象名来访问。但该成员属于类,在整个生命周期中只有一个拷贝。
  • static可以修饰类成员函数,表示这个函数属于类,因此这个函数没有隐含的this指针,所以函数只能访问static成员,不能访问非static成员。
  • 使用static修饰类成员时需注意,由于成员变量属于类,被所有的对象共享,因此需要在对象被实例化之前在类外被初始化。

4.static变量存储特性

所有的static成员变量都存储在静态去,在编译期就为其分配内存,在程序结束时释放。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章