自己在写C,C++代码的时候经常会不注意变量与函数的作用域,以及他们的作用,因此在这里总结一下(从网上调查的结果)。
内存中的5个区:
1.全局区(静态区)
2.常量区
3.代码区
4.栈区
5.堆区
局部变量:存放在内存的栈区;局部变量在定义它的函数内有效,但是函数返回后失效。
全局变量:存放在内存的全局数据区;整个工程文件内都有效。
静态全局变量:存放在内存的全局数据区;只在定义它的文件内有效。
静态局部变量:存放在内存的全局数据区;只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失。
#define定义:常量,宏不是存在内存的哪个位置。而是编译的时候直接进行替换。
const定义:常量,存放在内存的只读区域。
定义的字符串:常量,存放在内存的只读区域。
类中的静态变量:它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。由于类中的静态成员变量是不属于一个对象的,所以在使用的时候推荐如下写法:类名::静态成员变量名。
函数:
普通的静态函数:只能在声明文件中调用。
类中的静态函数:在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。虚函数不能定义为static
内联函数:在编译时类似宏替换,使用函数体替换调用处的函数名。主要用于频繁执行的函数,这样免去了很多函数出入栈的操作。
const函数:
1.const函数与同名的非const函数是重载函数
2.const函数中只能调用其他的const函数,不能调用非const函数,因为对象调用函数是需要传递对象自己,const函数中的*this是常量,非const函数中的*this是变量,因此不可以调用(除非去除*this的const属性);
3. 不能在const函数中修改所在类的对象的数据,因为const函数中的*this是常量,同样只能访问const函数;
4.const对象只能调用const函数 ,但是非const对象可以调用const函数。