浅谈标识符作用域

作用域

定义:作用域是一个标识符在程序正文中有效的区域。

种类:1;函数原型作用域

? 2:局部作用域

? 3:类作用域

? 4:命名空间作用域

1;函数原型作用域; 在函数原型声明时形参的作用范围就是函数原型作用域。

eg:

double area(double radius);

标识符radius的作用范围就在函数area形参列表的左右括号之间,而不能在其他地方引用。

2;局部作用域:函数形参列表中形参的作用域,从形参列表的声明处开始,到整个函数体结束时为止。具有局

eg;

#include<iostream>
using namespace std;
int main()
{
    int a,b,t,j;
    cin>>a>>b;
    t=a+b;
    if(a>0)
    {
        int c;
        cin>>c;
        j=a+c;
    }
    cout<<"t的值为"<<t<<" "<<"j的值为"<<j<<endl;

 } 

我们由上面可以看出a,b,t,j的作用域是整个main函数,然而c的作用域是在if里面。

3;类作用域:类可以被看做是一组有名成员的集合,类X的成员m具有类作用域。

对m的访问方式有以下三种:

1;如果在X地成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以直接访问成员m.

eg;

Date date;

date.show();

2:通过表达式x.m或者X::m。

eg:

void Date::show()

{
cout<<Date::day<<endl;
}

3:通过ptr->m这样的表达式,其中ptr为指向X类的一个对象的指针。

eg;

Date*date = new date();
date->show();

4;命名空间作用域:一个命名空间确定了一个命名空间作用域,凡是在该命名空间之内声明的,不属于前面所述各个作用域的标识符,都属于命名空间作用域。

命名空间作用;消除因不同模块中的类和函数之间可能发生重名而引起的错误。

以下是命名空间作用域的几种用法形式;

1;在命名空间内部可以直接引用当前命名空间中声明的标识符,如果需要引用其他命名空间的标识符,则

命名空间名::标识符名

eg:

namespace SomeNs{

    class SomeClass{....};
}

2;如果觉得命名空间限定显得过于冗长,则可以采用using语句

using命名空间名::标识符名;
using namespace::标识符名;

3;命名空间允许嵌套

eg:

namespace OuterNs{
    namespace InnerNs{
    class SomeClass{....};
        }
}

实例验证;下面所声明的全局变量就具有全局空间作用域,他们在整个文件中都有效。

#include<iostream>
using namespace std;
int i;                                     //在全局命名空间中的全局变量
namespace Ns {
    int j;                                 //在Ns空间中命名的全局变量
}
int main()
{
    i = 5;                                 //为全局变量i赋值
    Ns::j = 6;                             //为全局变量j赋值
    {                                      //子块1
        using namespace Ns;                //使得在当前块中可以直接引用Ns命名空间的标识符
        int i;                             //局部变量,局部作用域
        i = 7;
        cout << "i=" << i << endl;         //输出7
        cout << "j=" << j << endl;         //输出6 

?```
}
cout << "i=" << i << endl;             //输出5
return 0;

}
总结:通过以上的说明发现作用域其实指的就是定义的变量在不同的地方的作用范围,并且在不同的情况中会出现不同的结果。

原文地址:https://www.cnblogs.com/byp-520/p/11593563.html

时间: 2024-11-07 14:28:29

浅谈标识符作用域的相关文章

浅谈hover作用域

在前端页面制作中,我们时常要用到移动显示.隐藏的动态效果,我们一般采用js来实现此效果.不过在大部分情况下,我们也可以使用hover来实现此动态效果. 在此,我谈一谈hover的作用域问题,请看以下代码: <html><head> <title>1</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><

浅谈 js eval作用域

就简单聊下如何全局 eval 一个代码. var x = 1; (function () { eval('var x = 123;'); })(); console.log(x); 这个代码得到的是 1 而不是 123如果想让 eval 执行的代码是全局的,那么有几种方法. var x = 1; (function () { window.eval('var x = 123;'); })(); console.log(x); 这个方法标准浏览器都可以得到 123 而IE6-8则依然是 1 相同的

浅谈C#中的常量、类型推断和作用域

浅谈C#中的常量.类型推断和作用域 作者: 字体:[增加 减小] 类型:转载 时间:2013-12-19我要评论 这篇文章主要介绍了C#中的常量.类型推断和作用域,有需要的朋友可以参考一下 一.常量常量是其值在使用过程中不会发生变化的变量.在声明和初始化变量时,在变量前面家关键字const,就可以把该变量指定为一个常量: const int a=100;//a的值将不可以改变 常量的特征: 1.常量必须在声明时初始化.指定了其值以后,就不能再修改了.2.常量的值必须能在编译时用于计算.因此不能从

浅谈 JavaScript 编程语言的编码规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 JavaScript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注. 本文浅谈 JavaScript 编程中关

浅谈移动前端的最佳实践(转)

前言 这几天,第三轮全站优化结束,测试项目在2G首屏载入速度取得了一些优化成绩,对比下来有10s左右的差距: 这次优化工作结束后,已经是第三次大规模折腾公司框架了,这里将一些自己知道的移动端的建议提出来分享下,希望对各位有用 文中有误请您提出,以免误人自误 技术选型 单页or多页 spa(single page application)也就是我们常常说的web应用程序webapp,被认为是业内的发展趋势,主要有两个优点: ① 用户体验好 ② 可以更好的降低服务器压力 但是单页有几个致命的缺点:

浅谈 js 语句块与标签

原文:浅谈 js 语句块与标签 语句块是什么?其实就是用 {} 包裹的一些js代码而已,当然语句块不能独立作用域.可以详细参见这里<MDN block> 也许很多人第一印象 {} 不是对象字面量么?怎么成了语句块了?如果在赋值语句或者表达式里用的时候,确实是对象字面量,如: var a = {}; ({toString:function(){return "hehe"}}) + "..."; 是不是很有意思..但是直接使用如: {toString: fu

浅谈java异常[Exception]

本文转自:focusJ 一. 异常的定义 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也

浅谈Java中的对象和引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做"万物皆对象",这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: "按照通

浅谈Java中的对象和对象引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: “按照通俗的说法,每个对象都是某个类(class)的一个实