先来看一行代码:using namespace std;
这个是我们学习c++最先接触到的,可是为什么要出现这行代码呢?来看以下两个代码:
那这两个代码的区别仅仅是多了一个头文件,但是就是因为这一个小小的区别,使得第二个代码运行错误。那是因为#include <stdlib.h>中定义了rand函数,错误的原因也就是命名冲突。那我们在C语言中解决此类方法也只有修改变量名,可是当我们未来在进行一个多人合作的大项目时,将每个人的代码整合起来,难免会出现一些命名冲突。还有就是和团队一起写代码时,多个人设置的变量名相同,此时出现冲突,那该用谁的呢?谁改这个变量名呢?(我的建议是打一架,谁输了谁改哈哈)
于是C++就来填C语言这个坑了,引入了命名空间。
那么此时打印的rand是全局的还是命名空间里的呢?默认情况下是全局里的,而全局里的rand是一个函数指针。那我们想访问命名空间里的rand,这得引用域作用限定符:: 用这个来限定一下范围。
命名空间定义举例:
//命名空间可以定义变量/函数/类型
namespace std
{
int rand = 0;
int add(int a, int b)
{
return a + b;
}
struct Node
{
struct Node* next;
int val;
};
}
int main()
{
printf("%d\n", std::rand);
printf("%d\n", std::add(7,20));
struct std::Node node;
return 0;
}
那我们每次想用命名空间,都得用域作用限定符指定,确实有点麻烦。此时using namespace std;就派上了用场,它可以让我们不指定就访问。这句话意思是展开命名空间,这个是全部展开,此外还有部分展开的形式using std::add;
#include <stdio.h>
namespace std
{
int add(int a, int b)
{
return a + b;
}
}
using std::add;
int main()
{
printf("%d\n", add(7, 20));
return 0;
}
这就是命名空间使用的三种方式。
现在我们来解释using namespace std;
std是C++标准库的命名空间,也就是说C++库里所有的各种东西都会放到这个命名空间中,避免了工作中与其他团队成员定义的东西冲突。以下图片可以帮助大家理解:
另一种解决方法,也很简单:
#include <iostream>
int main()
{
std::cout << "你好" << std::endl;
return 0;
}
以上就是本篇内容,创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,如果喜欢我的文章,给个关注吧!
如果本篇博客有任何错误,请批评指教,不胜感激 !