const:
限制符号,限制某个变量所指向的内容不能通过这个对象修改。
但是可以通过其他的修改,比如:
int main(){ int x=5; const int &y=x; x++; cout<<y<<" "<<x; return 0; }
但是如果这样就通不过编译了
所以,const的作用是限制申明出来的变量的权限,所以我们有这么一个等式:
权限小=权限大 权限大!=权限小
什么意思呢:如下:
int main(){ int x=5; const int* y=&x; x++; cout<<*y<<" "<<x; return 0; }
int main(){ const int x=5; int* y=&x; x++; cout<<*y<<" "<<x; return 0; }
const最后一个问题是const与指针的问题,const出现在*号前,代表这个指针只能指向常量,出现在*号后,代表这个指针只能指向那块区域,但是那块区域的值可以改动,如下:
int main(){ const int y=5; int z=0; const int* x=&y; x=&z; cout<<*x<<" "<<x; return 0; }
int main(){ const int y=5; int z=0; int const* x=&y; x=&z; cout<<*x<<" "<<x; return 0; }
int main(){ int y=5; int z=0; int * const x=&y; x=&z; cout<<*x<<" "<<x; return 0; }
int main(){ int y=5; int z=0; int * const x=&y; (*x)++; cout<<*x<<" "<<x; return 0; }
static作用有以下两个:
1.规定变量作用区域,就是变量所在的函数或类(同于局部变量),只有在该函数/类才能调用。被static申明的变量只能在该文件被调用!
2.规定变量的存储地址(也就是确定了其生存期),static变量存在静态区域,不是在栈空间,函数/类执行完毕后不会被回收,且其值会一直保留,直至程序结束
全局变量:
全局变量就是静态变量少了第一个约束,它可以被任意的类或函数调用
static的全局变量:
作用是声明了一个全局变量,但是它只能在该文件内被使用,外部无法使用。下面详细介绍一下该类变量,并引入内外部链接及extern的使用。
注:关于编译链接这块的理解仅个人理解,可能有问题,若理解有问题请指出
编译的作用范围:一个文件(即一个.c或者一个.cpp)
链接:将不同的cpp组装,如将函数声明和代码实现拼接
内连接:文件内部的组装
外连接:不同文件间的组装,extern其实就是外连接
假设我们有两个文件a.cpp和b.cpp
分别如下:
//a.cpp #include<iostream> int num=9; //b.cpp #include<iostream> extern int num; cout<<num<<endl;
但是如果在b中extern int num=8;就会报错了
那么当我们定义的全局变量不想被其他文件所使用怎么办?
用static修饰!,如下:
//a.cpp #include<iostream> static int num=9; //b.cpp #include<iostream> extern int num; cout<<num<<endl;