美文网首页
C++之命名空间

C++之命名空间

作者: 二进制人类 | 来源:发表于2022-10-21 10:50 被阅读0次

命名空间的核心目的:解决命名冲突

命名空间的内容可以是 符号常量、变量、函数、结构、枚举、类和对象等等。

创建一个命名空间

namespace A {
    int a= 10;
}
void test()
{
    //cout<<"a = "<<a<<endl;//err
    //A::a访问a的方式 是最直接 也是最安全的方式
    cout<<"a = "<<A::a<<endl;
}

命名空间只能全局范围内定义

//一下是错误示范
void test(){
  namespace A{
      int a;
  }
}

命名空间是开放的,即可以随时把新的成员加入已有的命名空间中

namespace D {
    int a = 10;
}
//假如有一万行代码
namespace D {
    int b = 20;
}
void test()
{
    cout<<"a = "<<D::a<<endl;
    cout<<"b = "<<D::b<<endl;
}

命名空间可以包含函数

namespace A{
    void func(void){
        cout<<"func"<<endl;
    }
}
void test(){
    A::func();
}

声明和定义分开

namespace A{
    void func(void);
}
void A::func(){
    cout<<"func"<<endl;
}
void test(){
    A::func();
} 

无名命名空间

namespace {
    int a = 100;
}

void test()
{
    cout<<"a = "<<::a<<endl;//推荐写法 100
    cout<<"a = "<<a<<endl;//ok 100
}
//其他源文件 不能识别 无名命名空间中的a
//无名命名空间中的变量  等价于static修饰

命名空间取别名

namespace A {
    int a = 1000;
}
void test()
{
    cout<<"a = "<<A::a<<endl;
    //给A取别名
    namespace B=A;
    cout<<"a = "<<A::a<<endl;
    cout<<"a = "<<B::a<<endl;
}

using 声明命名空间中的成员识别

#include <iostream>
using namespace std;
namespace Data
{
    int a = 10;
    int b = 20;
    int c = 30;
}

void test()
{
    cout<<Data::a<<" "<<Data::b<<" "<<Data::c<<endl;
    //声明Data 中a成员可以识别
    using Data::a;
    cout<<"a = "<<a<<endl;
    //using声明成员 容易和其他普通变量造成命名冲突
    //int a = 100;//err
}

如果命名空间中的函数 是重载的,那么声明一个函数名 所有重载函数都识别。

namespace Data {
    void func(void)
    {
        cout<<"func void"<<endl;
    }
    void func(int a)
    {
        cout<<"func int"<<endl;
    }
    void func(int a, int b)
    {
        cout<<"func int int"<<endl;
    }
}

void test()
{
    //如果函数被重载 声明一个函数 所有重载函数都被声明
    using Data::func;
    func();
    func(10);
    func(10,20);
}

using声明整个命名空间

namespace Data {
    int a = 10;
    int b = 20;
    int c = 30;
}
//声明整个命名空间
using namespace Data;
//int a = 2000;//err 会和全局变量冲突
void test()
{
    cout<<a<<" "<<b<<" "<<c<<endl;// 10 20 30
    //优先选择普通局部变量
    int a = 1000;
    cout<<"a = "<<a<<endl;//1000
}

相关文章

  • C++ 基础知识点大纲

    C++ C++对C的加强 namespace命名空间 C++命名空间基本概念 C++命名空间定义,使用语法,意义 ...

  • C++命名空间

    C++ 命名空间 C++为了区分多个xyz的函数的时候,需要使用命名空间进行区分。 定义命名空间 using 使用...

  • 05 NDK-C++基础(一)

    1 C++对C的加强 1.1 namespace命名空间 1.1.1 C++命名空间基本概念 在C/C++中,变量...

  • C++之命名空间

    命名空间的核心目的:解决命名冲突 命名空间的内容可以是 符号常量、变量、函数、结构、枚举、类和对象等等。 创建一个...

  • C++基本语法

    命名空间认识一下C++ 《命名空间》 cout = console output 控制台输出 参考资料C++ 基本语法

  • 1.C++基础

    C++头文件 传统C头文件C++头文件hpp文件 命名空间 C++ 引入了新的概念,命名空间可以有效避免大型项目的...

  • C++ 高级特性

    C++ 命名空间 定义命名空间 您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在...

  • C++命名空间和作用域限定符, since 2020-11-15

    (2020.11.15 Sun) C++命名空间namespace(ns) 命名空间的引入是为了避免变量或函数重名...

  • C++ 中命名空间的 5 个常见用法,你知道几个呢?

    c++ 中的命名空间通常用于避免命名冲突。尽管命名空间在最近的 c++ 代码中广泛使用,但大多数较旧代码都不使用此...

  • NDK开发之C++语言学习第三节课内容回顾笔记

    一、介绍了C++的命名空间概率.C++可以用namespace关键字自定义命名空间 然后可以通过using nam...

网友评论

      本文标题:C++之命名空间

      本文链接:https://www.haomeiwen.com/subject/neauzrtx.html