《c++语言导学》——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节)销毁了它为止。

时间: 2024-08-02 07:05:01

《c++语言导学》——1.6 作用域和生命周期的相关文章

《c++语言导学》—— 导读

前言 现在的C++仿佛进化成了一种新的语言.与C++98相比,C++11更易于我们清晰.简洁.直观地表达思想.而且编译器可以更好地检查程序中的错误,程序的运行速度也提高了. 就像其他任何一种现代编程语言一样,C++的规模庞大且提供的库异常丰富,值得程序员认真学习以便高效地利用.这本小册子的目的是让有经验的程序员快速了解现代C++语言,因此它几乎介绍了C++的全部核心功能和重要的标准库组件.读者花费几个小时就能读完本书,但是想必所有人都清楚,要想写出漂亮的C++程序绝非一日之功.好在本书的目的并非

《c++语言导学》——第1章 基 础 知 识1.1 引言

第1章 基 础 知 识 引言 程序 Hello,World! 函数 类型.变量和算术运算 作用域和生命周期 常量 指针.数组和引用 检验 建议 1.1 引言 本章简要介绍C++的符号系统.C++的存储和计算模型以及如何把代码组织成程序.这些语言特性支持C语言中绝大多数常见的编程模式,我们称之为面向过程的程序设计(procedural programming).

《Java 7程序设计入门经典》一2.5 变量的作用域和生命周期

2.5 变量的作用域和生命周期 直至现在,我们使用的所有变量都在main()方法开始处声明.但是,Java允许在块内声明变量.正如第1章介绍的那样,块以左花括号开始,以右花括号结束.块定义一个作用域(scope).于是,每次开始一个新块时,就创建一个新的作用域.作用域决定哪些对象对程序的其他部分可见.它还决定这些对象的生命周期. 许多其他计算机语言定义两种类型的作用域:全局作用域和局部作用域.尽管这对Java也勉强成立,但是这并不是对Java作用域进行分类的最好办法.Java最重要的作用域是由类

《Java语言导学(原书第6版)》一3.4 控制流语句

3.4 控制流语句 源文件中的语句通常按照出现的先后次序自顶向下执行.控制流语句打破了这种常规,它通过决策.循环和分支等,使程序可以有条件地执行特定的代码块.本节介绍Java程序语言支持的决策语句(if-then.if-then-else.switch).循环语句(for.while.do-while)和分支语句(break.continue.return). 3.4.1 if-then语句和if-then-else语句 1.if-then语句 if-then语句是最基本的控制流语句.该语句使得

《领域特定语言》一2.5 DSL的生命周期

2.5 DSL的生命周期 为了介绍DSL,开篇先描述一个框架,及其命令–查询API,基于这个API,构建一层DSL以简化操作.我用这种方式,是因为我觉得这种方式有助于理解DSL,但这并不是人们在实际中使用DSL的唯一方式.另一种常见的方式是先定义DSL.在这种模式下,可以先从一些场景开始,按照期望DSL的样子,把这些场景写下来.如果语言是业务功能的一部分,最好和领域专家一起做─这是一个好的开始,使用DSL作为一种沟通媒介.有人喜欢从语句开始,他们期待这些语句能够语法正确.这意味着,对内部DSL,

《c++语言导学》——3.4 错误处理

3.4 错误处理 错误处理是一个略显繁杂的主题,它的内容和影响都远远超越了语言特性的层面,而应归结为程序设计技术和工具的范畴.不过C++还是提供了一些有益的功能,其中最主要的一个工具就是类型系统本身.在构建应用程序时,通常的做法不是仅仅依靠内置类型(如char.int和double)和语句(如if.while和for),而是建立更多适合应用的新类型(如string.map和regex)和算法(如sort().find_if()和draw_all()).这些高级成分简化了程序设计,减少了产生错误的

《c++语言导学》——2.2 结构

2.2 结构 构建新类型的第一步通常是把所需的元素组织成一种数据结构.下面是一个struct的示例: 这是Vector的第一个版本,其中包含一个int和一个double*. Vector类型的变量可以通过下述形式进行定义: 仅就v本身而言,它的用处似乎不大,因为v的elem指针并没有指向任何实际的内容.为了让它变得更有用,我们需要令v指向某些元素.例如,我们可以构造一个如下所示的Vector: 也就是说,v的elem成员被赋予了一个由new运算符生成的指针,而sz成员的值则是元素的个数.Vect

《Java语言导学(原书第6版)》一导读

前 言 自2010年年初Oracle公司收购Sun公司以来,Java语言迎来激动人心的时代.正如Java Community Process计划的活动所印证的,Java语言将不断发展.本书基于Java SE 8(Java Platform Standard Edition 8)并引用其API. 相比本书第5版(针对的是Java版本7),第6版有一些新特点: Lambda表达式使得功能可作为方法参数使用,代码作为数据使用.Lambda表达式描述单个方法接口(也称为功能接口)的实例会更简洁.4.4.

《Java语言导学(原书第6版)》一3.2 运算符

3.2 运算符 学习了如何声明和初始化变量之后,下面看看如何利用这些变量来做点事情.学习Java程序语言的运算符是个很好的切入点.运算符是一类特殊的符号,它们执行1个.2个或3个运算对象上的特定操作,然后返回结果. 研究Java程序语言的运算符时,先了解这些运算符的优先级可能会有帮助.表3-2根据优先级顺序列出了所有的运算符.越靠近表的顶端,运算符的优先级越高.优先级较高的运算符先计算,相对较低的后计算.同一行的运算符优先级相等.当表达式中出现优先级相等的运算符时,计算规则如下:赋值运算符从右到