C++命名空间namespace

文章目录

    • 1.命名空间的简介
    • 2.为什么要使用命名空间?
    • 3.命名空间的定义
    • 4.命名空间的使用

1.命名空间的简介

大家都知道在编程中如果在一个函数中定义两个名字相同的变量,便会报重定义错误。命名空间就是为解决这类问题解决的。

比如有两个学生都叫张三,如果没有命名空间,会导致有人喊张三的时候导致混乱出错。比如一个张三在1班,一个张三在2班,喊的时候1班的张三或2班的张三就不会有歧义或错误,那1班和2班就是两个命名空间

所谓命名空间,是指标识符(变量或函数等)的各种可见范围。

2.为什么要使用命名空间?

  1. 解决命名冲突的问题
  2. 在C++中,名称可以是变量、函数、结构体、枚举、类,工程量越大,名称相互访问的可能性越大
  3. 另外使用多个厂商的类库时,也可能导师名称冲突

3.命名空间的定义

命名空间的定义非常简单,就是关键字namespace用大括号包裹住代码就行

namespace myName{
	// 命名空间中的代码
}
// 注意此处没有分号

4.命名空间的使用

(1) 我们先来看一个简单的例子

#include 

namespace A
{
    int num;

    void func(void){
        std::cout << "A中的fun" << std::endl;
    }
} 

namespace B
{
    int num;

    void func(void){
        std::cout << "B中的fun" << std::endl;
    }
} 

int main(){

    A::func();
    B::func();

    A::num = 10;
    B::num = 20;
    std::cout << "A中的num = " << A::num << std::endl;
    std::cout << "B中的num = " << B::num << std::endl;
    
    return 0;
}

输出结果如下:

A中的fun
B中的fun
A中的num = 10
B中的num = 20

(2)使用using引入指明当前的作用域

#include 

namespace A
{
    int num;

    void func(void){
        std::cout << "A中的fun" << std::endl;
    }
} 

namespace B
{
    int num;

    void func(void){
        std::cout << "B中的fun" << std::endl;
    }
} 

using namespace B;

int main(){

    func();
    num = 10;

    std::cout << "B中的num = " << B::num << std::endl;
    
    return 0;
}

输出结果如下:

B中的fun
B中的num = 10

可以发现这里指明了当前的命名空间为B,就可以省略前面的B::

(3)同时指明命名空间

#include 

namespace A
{
    int num;

    void func(void){
        std::cout << "A中的fun" << std::endl;
    }
} 

namespace B
{
    int num;

    void func(void){
        std::cout << "B中的fun" << std::endl;
    }
} 

using namespace A;
using namespace B;

int main(){

    func();
    num = 10;

    std::cout << "B中的num = " << B::num << std::endl;
    
    return 0;
}

这时候编译没法通过,因为编译器不知道你是用A的还是B的


但是假如B中有一个不重名的变量score

#include 

namespace A
{
    int num;

    void func(void){
        std::cout << "A中的fun" << std::endl;
    }
} 

namespace B
{
    int num;

    double score;
    void func(void){
        std::cout << "B中的fun" << std::endl;
    }
} 

using namespace A;
using namespace B;

int main(){

    func();      // 报错
    num = 10;    // 报错

    score = 98.5;  // 正常

    std::cout << "B中的num = " << B::num << std::endl;
    
    return 0;
}

感谢千锋教育的视频,简单清晰的讲明白了命名空间

你可能感兴趣的:(C++,c++)