标签:全局变量 局部变量 列表 标识 pre 不同 语句 names 情况
定义:作用域是一个标识符在程序正文中有效的区域。
种类:1;函数原型作用域
? 2:局部作用域
? 3:类作用域
? 4:命名空间作用域
eg:
double area(double radius);
标识符radius的作用范围就在函数area形参列表的左右括号之间,而不能在其他地方引用。
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里面。
对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();
命名空间作用;消除因不同模块中的类和函数之间可能发生重名而引起的错误。
以下是命名空间作用域的几种用法形式;
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;
}
标签:全局变量 局部变量 列表 标识 pre 不同 语句 names 情况
原文地址:https://www.cnblogs.com/byp-520/p/11593563.html