C++命名空间相关解析

    xiaoxiao2021-03-25  142

    使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突。 在多文件编译时,多个全局变量取名重复了,产生了命名冲突,这样的程序在C中,是无法通过编译的。如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。

    第一次见到的C++代码中,有一句:

    using namespace std

    这就是对命名空间的使用,这里的std便是一个命名空间。

    关键字:namespace

    namespace 名称{//声明}

    namespace N1 { int a; void Test() { } }

    在命名空间中定义的任何东西都局限于该命名空间内,即上例中,a和函数Test只在命名空间N1的作用域内有效。

    ::作用于限定符 例如要使用N1中的a

    using namespace N1; N1::a = 10; using N1::a;

    在using的作用域内如果使用到N1中的成员a,则不必再用命名空间限定。在以后的程序中如果用到a,则隐含的指N1::a。 using声明的作用域是从using语句开始,到using所在的作用域结束。要注意,在同一作用域内用using声明的不同的命名空间的成员不能有同名的成员,否则会发生重定义。

    命名空间可以进行嵌套,也可以命名

    namespace N1 { int a; char c; namespace N2 { double d; } } namespace N1 = N3;

    无名的命名空间

    namespace { int a; }

    其他文件无法引用没有名字的无名命名空间,它只在本文件的作用域内有效,从命名开始,到本文件结束为止。

    无名命名空间与static的区别

    无名命名空间是外部链接 static是内部链接 在声明无名命名空间时,系统为其分配了一个名字。 二者都是无法被其他文件引用。

    extern与static的区别

    static:内部链接,定义的变量只能在此变量的文件中使用 extern:外部链接,已经定义一个变量,但不在当前编译单元内


    C++库的所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(iostream)中的函数、类、对象和类模板是在命名空间std中定义的。所以在C++程序的一开始,就用using namespace对std进行全局声明。

    转载请注明原文地址: https://ju.6miu.com/read-10170.html

    最新回复(0)