(说明:这是看完C++ primer(第五版)P204的理解)
关于scope和lifetime这两个概念,有以下几个需keep in mind:
1.“In C++,names have scope, and objects have lifetimes.”
这两个概念讲的是不同东西的特点
“The scope of name is the part of the program's text in which that name is visible”;
"The lifetime of an boject is the time during the program's execution that the object exists."
2.scope 和 lifetime 对于一个变量在什么时候可用很重要。
一个变量var,在一个block里面被定义,则这个block“{}”就是变量var的scope,这个变量就被成为local variable。
但是,在一对{}范围内定义的local variable有不同的类型:
第一种:普通local(普通青年),他是个object。
他只在这对{}内可以用,这对{}后面的操作看不见他了,对应于他的scope是这对{};
更进一步的是,这对{}里面的东西执行完后,这个local就会被destroyed,对应的是他的lifetime也是这对{};
如果后面又出现了这对{},那么将依照{}内的指令再次(重新)造出一个普通青年local,但是他已经不是当年那个他了。{}执行完后,这个local又被destroyed,以后每次出现{}都是一个轮回,就是一个个不断born,die,born,die的轮回。
第二种:文艺local(文艺青年),用static表明他的文艺态度。
虽然local “static” object文艺一些,但是出了{},后面的操作也看不见他,他的scope还是这对{};
但是,static的文艺之处在于,这对{}里面的东西执行完后,这个local会继续存活,直到整个program结束,这对应的是文艺local static的lifetime从一对{}延长到了整个program。
对应于普通青年local的“生-死-生-死轮回”,文艺青年local static是“生------死”,他从born之后就一直好好活着,尽管出了{}还是没人记得他的存在,但见或不见,文艺青年static就在那里。
以上。