extern关键字的作用
一般用这个表示这个变量在别的文件里,提示编译器去别的文件里找这个函数或者变量
1.extern C的作用?用法?
static关键字的作用
1.static修饰局部变量
static修饰的局部变量存储在静态区,在main函数之前初始化,程序退出时销毁。一个典型的例子:
用于函数调用次数计数
void function(){
static int count = 0;
cout << "call function" << count << "times" << endl;
}
int main(){
for(int i=0;i<5;i++) {
function();
}
return 0;
}
2.static修饰全局变量
因为全局变量本来就在静态区,所以这个地方表示变量只能被包含该定义的文件内使用
3.static修饰函数
使得函数只能在包含该函数定义的文件中被调用,所以static函数的声明和定义应该在一个文件内
4.在C++中的作用
可以实现不同对象之间的数据共享
const 关键字的作用
1.const修饰全局变量,存储在全局变量区
2.const修饰局部变量,存储在栈区
3.const修饰指针,int * const;
4.const修饰指针指向的对象, const int *;
5.const修饰引用做形参;修饰函数参数void func(const A& a)比void func(A a)要好,这样就不用拷贝了
6.const修饰成员变量,必须在构造函数列表中初始化;
7.const修饰成员函数,说明该函数不应该修改对象的非静态成员,指针所指的非成员对象值可能会被改变。(相当于是修饰this指针)
9.const修饰函数返回值:如果返回的是指针,加上const后,函数的返回内容不能被修改?????如果是指传递,由于函数会把值复制到外部存储单元中取,所以加const没有意义。
10.const修饰对象,const对象只能访问const成员函数,非const对象可以访问任意的成员函数。
11.const和#define的区别:
const常量有数据类型,宏常量没有。编译器可以对前者进行数据类型检查,后者只是字符替换,可能会产生意料不到的错误;c++中const常量可以完全取代宏常量