c++作用域及命名空间

C++作用域

  1. 什么是作用域
    每一个变量、函数、数组、结构体、类、等实体都有其自己有效的作用范围,这就是变量的作用域。

    在局部变量中,局部变量只在定义的函数范围内有效;即从变量定义开始到函数结束被释放。
    
int fun()
{
    int a;   //a的作用域开始
    ……
    ……
}            //a的作用域结束

在全局变量中,全局变量的作用域为从定义变量的位置开始到本源文件结束。
若全局变量与局部变量重名,则在局部变量作用域中优先使用局部变量;
若想在局部变量作用域中使用全局变量需要使用作用域限定符(::)


#include<iostream>
using namespace std;

int a = 1;                          //全局变量a的作用域开始
void fun();
int main()
{
    int a = 2;                     //局部变量a的作用域开始
    fun();
    cout << a <<endl;       //在局部变量作用域中优先使用局部变量
    cout << ::a <<endl;     //限定使用全局变量
    return 0;
}          //主函数结束局部变量a作用域结束;本源文件结束,全局变量a的作用域结束

void fun()
{
    cout << a <<endl;

}


这里写图片描述

C++命名空间简述

  1. 什么是命名空间:

    命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。

  2. 命名空间的作用

    建立多个相互分割的作用域,把实体进行分隔,以免名字冲突。

  3. 访问作用域内实体

    利用作用域限定符访问作用域内实体;

    表达式:
    命名空间名::命名空间成员名;

#include <iostream> 
using namespace std;   

namespace Bird
{
    void Show()
    {
        cout << "Bird" << endl;
    }
}

namespace Person
{

    void Show()
    {
        cout << "Person" << endl;
    }
}


int main()
{

    Bird::Show();
    Person::Show();

    system("pause");
    return 0;
}

这里写图片描述

4.标准命名空间std

C++标准库所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件中函数、类和对象模板是在命名空间std中定义的;

因此为了减少::的使用可以在文件开头加入 using namespace std;

posted @ 2017-09-03 19:04  DuanRui  阅读(536)  评论(0编辑  收藏  举报