const, static, define 以及inline的区别

来源:互联网 发布:js输入框输入触发事件 编辑:程序博客网 时间:2024/05/18 00:58

const, static, define,inline的使用:
define只是用来做文本替换的。尽量使用const代替宏。
const常量存在与程序的数据段,并在堆栈中分配了空间。const常量有数据类型,而宏常量没有数据类型。编译器可以对const常量进行类型安全检查。

const的作用:
1. 可以阻止一个变量被改变,通常需要对它进行初始化。
2. 对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或同时
指定为const。
3. 在一个函数声明中,const修饰形参,表明它是一个输入参数,其值在函数内部不允许>改变。
4. 对于类的成员函数,指定其返回值为const类型,使得其返回值不为左值。

static 变量的作用:
1. 函数体内的static变量的作用范围为该函数体,该变量的内存只被分配一次。因此,其
值在下次调用时仍维持上次的值。
2. 限制变量的作用域,在模块内的static全局变量可以被模块内的所有函数访问,但不能
被模块外其他函数访问。
3. 限制函数的作用域,在模块内的static函数只可被这一模块的其他函数调用。
4. 在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例
修改了该值,其修改值为该类的其他所有实例所见。
5.在类中的static成员函数属于整个类所拥有,这个函数不接受this指针,只能访问类的
static成员变量。

static全局变量和普通全局变量的区别:
都是静态存储方式;
区别:非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静>态的全局变量在各个源文件中都是有效的,而静态全局变量则限制了作用域,只在定义该>变量的源文件内有效。

inline内联函数:
引入内联函数的目的是替代C语言中表达式形式的宏定义来解决程序中函数调用的效率问题

1. inline定义的类的内联函数,在使用时直接进行替换(类似与宏),效率高。
2. 它是一个真正的函数,会检查参数的类型,进行安全检查。在编译后,把函数体里面的
代码代替函数名,不需要像普通函数那样保存现场等。
3. 不能含有递归函数,以及含有while,switch等结构。应该先定义后使用。
4. 宏是在预处理时进行的,内联函数是在编译时进行的。都是进行代码的替换。
5. 内联函数的缺陷是:太多的内联函数会造成代码膨胀。

备注:参考了很多网上的博客文档,非常感谢那些大牛们。
希望大家多多指教。

0 0
原创粉丝点击