C/C++关键字

1. static关键字

作用

  1. 在函数体内静态变量具有记忆功能。在函数体内定义的静态变量离开时不会被清除,在下次函数调用的时候其值保持不变。
  2. 限制变量或函数的使用范围。static修饰的全局变量或者函数只能在本文件中被使用,不能被外部函数使用。
  3. static变量与普通变量的区别在于它只会被初始化一次,下次使用的时候仍然保留之前的值。
  4. 在类中使用static。static成员是类的一部分,在一个程序中只有一个实体,不存在与对象中。
  5. static成员存储于程序静态存储区,定义时要分配空间,所以不能在类中初始化。在类外初始化是不需要带上static关键字。

优点

  1. static变量不占用全局命名空间
  2. 可以实现数据隐藏。static变量可以声明为private的,而全局变量不能。
  3. 类中的静态成员可以为所有的对象所使用。

注意事项

  1. 普通成员函数隐含this指针,而静态成员函数没有,因此它只能调用类中的静态成员函数。
  2. 如果在头文件中定义了静态对象,会在所有#include的源文件拷贝一份相同的对象,造成资源的浪费。

2. const关键字

作用

  1. 定义const常量,具有不可变性。
  2. 保护被修饰的对象不可被修改。
  3. 节省空间,避免不必要的空间浪费(相对于#define来说)。
  4. 提高了程序的效率,const对象保存在符号表中,使它成为一个编译期的常量,避免了内存操作。

注意事项

  1. C++中临时对象是const类型的,如字符串常量。

3. volatile关键字

作用

避免编译器优化出现的问题。有时候编译器对某一个对象的读取优化为直接读取寄存器,而不是通过访问内存来提升速度。因此在多线程编程之中,变量的值可能被别的线程修改了,而寄存器中的值没有改变,从而造成读取的值和实际的值不一致的问题。因此被volatile关键字修饰的变量,系统每次用它的时候强制从内存中读取。

4. 枚举变量的值

在枚举中,某个枚举变量的值默认为前一个变量的值加1,如果第一个枚举变量没有被赋值,则其值默认为0.并且枚举变量的值是可以重复的。

4. 左值和右值

定义

左值就是可以出现在表达式等号左边的值,它是存储值的那块内存的地址,也称为变量的地址,可以被改变。右值是指存储在某内存地址中的数据,也称为变量的数据。左值可以为右值,但右值不可以为左值。

例子

++i表示取a的地址,对它的内容进行+1操作,然后把+1后的值放在寄存器中,它可以被当做左值来使用。i++表示取a的地址,把它的值放在寄存器中,然后对内存中a的值进行+1操作,不能当作左值来使用。i++的运算结果并不是i这个变量的引用,而是一个值为i的临时变量,编译器不允许对一个临时变量重新赋值。

5. new/delete与malloc/free

  1. new/delete是C语言标准库函数,malloc/free是C++运算符。
  2. new能自动计算对象的内存空间,malloc不能。
  3. new/delete是类型安全的,malloc/free不是
  4. new/delete可以自动调用构造和析构函数,malloc/free不能。

6. 引用作为返回值

优点

在内存中不产生被返回值对象的副本,提升程序的效率与安全性。

注意事项

  1. 不能返回局部变量的引用。
  2. 不能返回函数内部new出来的对象的引用,因为返回的实际上是一个临时的对象,它无法被释放,造成内存泄露。
  3. 返回类的引用最好用const修饰。
原文地址:https://www.cnblogs.com/alwayswangzi/p/7302611.html