c++学习笔记之c++作用域详解

本文深入探讨了C++作用域的概念、类型及其在代码结构中的应用,包括全局作用域、名字空间作用域、类作用域和语句作用域等,并通过实例展示了名字如何在不同作用域中离开和进入,强调了避免复杂嵌套作用域的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++作用域今天来总结一下作用域的问题。定义:作用域是一个程序文本的区域。每个名字都定义在一个作用域中,在声明点到作用域结束的区间内有效。下面就上代码:void f() { g();//error ,g()不在作用域内 } void g() { f();//可以 } void h() { int x=y; int y=x; g(); }


上边代码对f()的调用在g()的作用域中,此作用域嵌套在全局作用域,名字必须是先声明后使用的,所以f()不能调用g()。
C++有多种作用域
1.全局作用域,在任何其他作用域之外的程序区域。
2.名字空间作用域 :一个名字空间作用域嵌套于全局作用域或者另一个名字空间作用域中比如using namespace std;
3.类作用域:位于{。。。。。}之间的的函数参数列表中的程序区域。
4语句作用域“例如 for语句内的程序区域

作用域的作用是保持名字的局部性,使之不受声明其他地方名字的影响。

下面是一个较大的实例,说明了名字是如何在语句和语句块末尾离开作用域的:

void f(int x)//f 作用域是全局的。x是局部变量 { int z=x+7;//z是局部的。 } int g(int x) { int f=x=2; return 2*f; } 因为x在不同的作用域内,所以是不会有冲突的。 int max(int a,int b) { return (a>=b)?a:b; } int abs(int a) { return (a>0)?-a:a; }


下面是一个较大的实例,说明了名字是如何在语句和语句块末尾离开作用域的:class My_vector{ vector<int> v; public: int largest() { int r=0; for(int i=0;i<v.size();++i) { r=max(r,abs(v[i]); return r; //not i here } }; } int x; int y; int f() { int x=y; ++x; } ++x; return x; }

下面在举几个例子:类中函数

class C { pubic: void f(); void g();//成员函数 { } }; void C:f() //类外定义的成员函数 { }


这是一种最常见的有用用法

综上述,不建议使用这种复杂的嵌套作用域,记住,程序保持简单性。
在程序设计中,尽量少用全剧变量。因为全局变量是一个公共接口,下面的方法都可以进行对其修改。代码多的时候基本不可能知道他是被哪个函数修改了。所以一个好的程序应该只有少用全局变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值