C++语言导学 第一章 基础知识 - 1.5 作用域和生命周期

C++语言导学 第一章 基础知识 - 1.5 作用域和生命周期

1.5 作用域和生命周期

声明语句将一个名字引入到一个作用域中:

  • 局部作用域(local scope):声明在函数或者lambda内的名字称为局部名字(local name)。局部名字的作用域从声明它的地方开始,到声明语句所在的块的末尾为止。块(block)用花括号{}限定边界。函数参数的名字也属于局部名字。
  • 类作用域(class scope):如果一个名字定义在一个类中,且位于任何函数、lambda或enum class之外,则称之为成员名字(member name),或类成员名字(class member name)。成员名字的作用域从包含它的声明的起始{开始,到该声明结束为止。
  • 名字空间作用域(namespace scope):如果一个名字定义在一个名字空间内,同时位于任何函数、lambda、类或enum class之外,则称之为名字空间成员名字(namespace member name)。它的作用域从其声明位置开始,到名字空间结束为止。

声明在所有结构之外的名字称为全局名字(global name),我们称其位于全局名字空间(global namespace)中。

此外,对象也可以没有名字,比如临时对象或者用new创建的对象。例如:

vector<int> vec;						//vec是全局的(一个全局整型向量)
struct Record{
	string name;						//name是Record的一个成员(一个字符串类型的成员)
	//...	
};

void fct(int arg)						//fct是全局的(一个全局函数)
										//arg是局部的(一个整型参数)
{
	string motto{“Who dares wins”};		//motto是局部的
	auto p = new Record{“Hume”};		//p指向一个未命名的Record(用new创建的)
}

我们必须先构造(初始化)对象,然后才能使用它,对象在作用域的末尾被销毁。对于名字空间对象来说,它的销毁点在整个程序的末尾。对于成员来说,它的销毁点依赖于它所属对象的销毁点。用new创建的对象一直“存活”到delete销毁了它为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hank_W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值