本节书摘来自华章计算机《c++语言导学》一书中的第1章,第1.6节,[美] 本贾尼·斯特劳斯特卢普 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.6 作用域和生命周期
声明语句把一个名字引入它的作用域中:
- 局部作用域(local scope):声明在函数(见1.4节)或者lambda(见5.5节)内的名字称为局部名字(local name)。局部名字的作用域从声明它的地方开始,到声明语句所在的块的末尾为止。块(block)的边界用花括号{ }表示。函数参数的名字也属于局部名字。
- 类作用域(class scope):如果一个名字定义在类(见2.2节,2.3节,第4章)的内部,同时位于任何函数(见1.4节)、lambda(见5.5节)和enum class(见2.5节)的外部,则我们把这个名字称为成员名字(member name)或者类成员名字(class member name)。成员名字的作用域从它的括起声明的左侧花括号{开始,到该声明结束为止。
- 命名空间作用域(namespace scope):如果一个名字定义在命名空间(见3.3节)的内部,同时位于任何函数、lambda(见5.5节)、类(见2.2节,2.3节,第4章)和enum class(见2.5节)的外部,则我们把这个名字称为命名空间成员名字(namespace member name)。它的作用域从声明它的地方开始,到命名空间结束为止。
声明在所有结构之外的名字称为全局名字(global name),我们说它位于全局作用域(global namespace)中。
某些对象也可以没有名字,比如临时对象或者用new(见4.2.2节)创建的对象。例如:
https://yqfile.alicdn.com/b122dc93c0b2a0a06034da343fc2c7332b3759b5.png
" >
我们必须先构建(初始化)对象,然后才能使用它,对象在作用域的末尾被销毁。对于命名空间对象来说,它的销毁点在整个程序的末尾。对于成员对象来说,它的销毁点依赖于它所属对象的销毁点。用new创建的对象一直“存活”到delete(见4.2.2节)销毁了它为止。