1.关于变量的生命周期:
不同定义的,的变量有不同的生命周期其,在分析的时候大致可以分成以下三个区域
1.全局变量:生命周期到程序结束
2.new 出来的变量,需要认为进行释放,否则到关机为止
3.static变量,效果类似java,第一次定义的赋值不会再重复定义,生命周期和全局变量一样
4.局部变量:没啥稀奇玩意,方法断了这个就停了
详细代码如下啊
using namespace std;
void f();//提前对于方法的声明
int a = 12;//(1)全局变量
// 生命周期为程序结束;
int main() {
int c = 1;//(3)(局部变量)生命周期是从定义到方法结束
int* c1 = new int(2);//(4)这种new出来的,生命周期是有自己确定的
//java里面虽然天天new ,但是程序结束以后Java会自己吧这坨东西删掉
//c++没这个功能了说,
//如果不使用手动删除的delete功能
delete c1;
//那么这个玩应就会产生堆叠
return 0;
}
void f() {
static int b = 1;//(2)一个静态变量,应该是和全局变量一起放在静态中
//这个静态变量就算重复使用这个方法,也不会重新赋值为1,静态变量已经开辟好空间了
//但这个作用域,不要和生命周期进行混淆,这个生命周期和全局变量一样
b++;
cout << b << endl;
return;
}
2.关于作用域,目前来看比较像java中的可见性
(1)局部变量的作用范围仅仅只是引号而已
(注明,这里可能有个先入为主的概念.类似这一样)
//关于"::"的使用
int a = 12;
int main() {
int a = 123;
cout << a; //强龙不压地头蛇.这里应该是a
cout << ::a;//如果想用全局变量,前面加一个::
//尽量避免这种情况吧
(2)全局作用范围,如果不出意外的话就是从自身开始
(3)关于extern , 可以修饰方法和变量 , 表示引用一个已经在别处定义的变量(会自动去别处,甚至是再自己下面去寻找这个东西)
(注意一下这个搜索范围是全局作用域,也就是源文件才可以搜索到,或者说是在同一个文件目录下才能看到)
只能在源文件这个模块里面找到,剩下的就算是标头文件也只能老老实实导包,对了其实导完就可以用extren去访问h文件,只不过个人感觉没啥必要了...
这个extren甚至可以是避免声明使用后面的方法,但是一旦被static修饰,就只能定义的文件中使用了
static相当于privary的作用?
当然再自己文件里这俩还是可以共存的
3.关于命名空间:namespace
(头文件哪里还没有处理完成,所以这里先不弄)
可以理解为一个附加的姓氏?王五和张五名字都是五,加了前面的姓氏就可以准确交出名字,就不会发生商场里喊一声帅哥全都回头的事情了
使用(空间名字)+"::"+变量名字
//这条语句就相当于为里面所有的变量都冠上一个姓氏
namespace A {
int a = 112;
}
namespace B {
int a = 122;
}
extern int a;
cout << a<<" "<
关于std,那个是标准库里面的实体空间
(4)关于头文件的问题
头文件的作用原理其实是这个
在h*文件中写好要使用方法的声明,然后在同名的cpp*文件中把具体的方法实现或者赋值(有时候要加extern)