c++中的命名空间详解

2023年8月15日 13:11 ry 225

在c++中遇到的很多坑都是命名空间的问题,大部分就是命名空间导致的函数/方法冲突,遇到这样的bug往往很耗费时间,命名空间简单地可以分为自定义和系统命名空间,我们来看我们常见的一个代码,如图所示

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    cout<<"hello,world"<<endl;
}

这里我们用了标准库的命令空间std,将std命名空间的所有成员引入当前作用域,因此我们可以直接使用std作用域下面的cout和endl函数,否则我们必须显示地使用前缀std::cout来访问标准库的成员,代码如下所示

#include<stdio.h>
#include<iostream>

int main()
{
    std::cout<<"hello,world"<<std::endl;
}

接下来我们看自定义命名空间,在demo1.h文件中代码如下所示

namespace Test
{
    int add(int a,int b)
    {
        return a+b+1;
    }
}

在demo1.cpp中代码如下所示

#include "demo1.h"
#include<iostream>
using namespace std;
int add(int a,int b)
    {
        return a+b;
    }
int main()
{
    cout<<Test::add(10,20)<<endl;
    return 0;
}

我们现在有2个add函数,我demo1.cpp中输出命名空间Test的add函数,结果如下所示可见正执行的是Tests作用域下的add函数,如果我直接使用using namspace Test呢,demo1.cpp代码改成如下所示

#include "demo1.h"
#include<iostream>
using namespace std;

int add(int a,int b)
    {
        return a+b;
    }
int main()
{
    using namespace Test;
    cout<<add(10,20)<<endl;
    return 0;
}

结果如图所示可见报错了,由于用了using namspace Test,导致全局有2个add函数,编译器无法识别用哪个add函数,导致函数冲突了,因此最好减少using namspace xxx的使用,容易导致bug,为了方便导致了bug,这是很容易忽略的!

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
暂时还没有任何评论哦...

赣ICP备2021001574号-1

赣公网安备 36092402000079号