美文网首页
001-01 namespace命名空间

001-01 namespace命名空间

作者: 有何不可12317 | 来源:发表于2018-08-25 14:51 被阅读0次

1 namespace 命名空间

1.1 历史

头文件中 C++ 标准对 ".h" 与 不带".h" 的区别 是为了兼容以前 C++ 代码 一个是为了支持新的标准

标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),为了更好地控制标识符的作用域。

1.2 C++ 命名空间定义及使用语法

std是 C++ 标准命名空间,C++ 标准程序库中的所有标识符都被定义在std中。

比如标准库中的类iostream、vector
等都定义在该命名空间中。

使用时要加上using声明

(using namespace std)

或using指示,如:

std::string
std::vector<int>

1.3 C 与 C++中的区别

  • C中的命名空间

    在C语言中只有一个全局作用域

    C语言中所有的全局标识符共享同一个作用域

    标识符之间可能发生冲突

  • C++中提出了命名空间的概念

    命名空间将全局作用域分成不同的部分

    不同命名空间中的标识符可以同名而不会发生冲突

    命名空间可以相互嵌套

    全局作用域也叫默认命名空间

1.4 定义 与 使用

定义

namespace name { ... }  // 定义

使用

using namespace name;   // 使用name命名空间
using name::varible;    // 使用name命名空间中的varible变量
::varible;              // 使用默认命名空间的varible变量

1.5 实例

namespace NameSpaceA
{
    int a = 0;
}

namespace NameSpaceB
{
    int a = 1;

    namespace NameSpaceC
    {
        struct Teacher
        {
            char name[10];
            int age;
        };
    }
}

int main()
{
    using namespace NameSpaceA;
    using NameSpaceB::NameSpaceC::Teacher;

    printf("a = %d\n", a);  // a = 0
    printf("a = %d\n", NameSpaceB::a);  // a = 1

    NameSpaceB::NameSpaceC::Teacher t2;
    Teacher t1 = {"aaa", 3};

    printf("t1.name = %s\n", t1.name); // name = aaa
    printf("t1.age = %d\n", t1.age); // age = 3

    return 0;
}

1.6 总结

  • 当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。若不引入using namespace std ,需要这样做。std::cout。
  • c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
  • C++命名空间的定义: namespace name { … }
  • using namespace NameSpaceA;
  • namespce定义可嵌套。

相关文章

  • 001-01 namespace命名空间

    1 namespace 命名空间 1.1 历史 头文件中 C++ 标准对 ".h" 与 不带".h" 的区别 是为...

  • 命名空间 namespace

    /*命名空间:命名空间是一种封装事物的方法命名空间怎么声明?关键字: namespace 导入命名空间: use起...

  • 命名空间(namespace)

    命名空间,也称名称空间,名字空间。命名空间是用来组织和重构代码的。如同名字一样的意思,NameSpace(名字空间...

  • 命名空间 namespace

    命名空间 附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义...

  • 命名空间namespace

    outer_func的local中的outer_arg的值为1.inner_func的local中的outer_a...

  • 命名空间(namespace)

    通常来说,命名空间是唯一识别的一套名字,这样当对象来自不同的地方但是名字相同的时候就不会含糊不清了。 为什么需要命...

  • namespace 命名空间

    避免命名冲突, 相当于引入类使用时需要nmsl.anmsl.b

  • 命名空间 namespace

    namespace 在typescript里给我们带来的好处就是给我们一个类似模块化开发的方式,让我们能尽量少的声...

  • C#随笔1

    1命名空间 语法 namespace 命名空间名称{若干个类型} ORnamespace 命名空间名称.子命名...

  • 四十、Docker网络-网络命名空间

    网络命名空间 Linux的Namespace(命名空间)技术是一种隔离技术,常用的Namespace有 user ...

网友评论

      本文标题:001-01 namespace命名空间

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