Static、#define、const、mutable、typedef


Static、#define、const、mutable、typedef

代码存储区域:常量区、代码区、静态区(全局区)、堆区、栈区

栈区向下增长,堆区向上增长。栈由系统管理,没有内存碎片,每个元素之间都是连续的,大小比较小,8k,可以修改系统参数,堆区存储动态开辟的变量。

还有一个内核空间,但是它不与用户直接交互(内核区)。

static

修饰局部变量:局部变量的存储区域改变、变为静态区,生命周期改为程序结束才销毁。

修饰全局变量:全局变量只能在本文件中访问,不能在其它文件中访问, extern 外部声明也不可以。

修饰成员变量:静态成员变量不属于实体的类对象,要在类外初始化

修饰成员函数:静态函数属于类不属于类对象 需要通过类作用域调用 函数无this指针(静态成员函数仅能访问静态的数据成员,不能访问非静态的数据成员,也不能访问非静态的成员函数)

#define

带参数的宏定义可以减少函数调用的开销,在运行时只是简单的展开。

const

申明一个常量,在运行期间可以进行类型检查。

mutable

mutable为可变的,易变的跟C++中的const是反义词。被mutable修饰的变量(mutable智能用于修饰类的非静态数据成员),将永远处于可变的状态, 即使在一个const函数中

typedef

用途: 1、为名称复杂的变量创建别名; 2、创建与平台无关的变量,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。 另外,因为typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏来得稳健(虽然用宏有时也可以完成以上的用途)。 比如:size_t的介绍

// 在vs中,short 2个字节,int 4个,long也是4个,long long 8个
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
// 在Linux下,short 2个,int 4 个,long 8个,long long 也是8个
typedef short int16_t;
typedef int int32_t;
typedef long int64_t;

所以在程序源码中,只使用这些在头文件中声明的别名。 参考:typedef用法详解


文章作者: AllenMirac
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AllenMirac !
  目录