1.命名空间
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存
在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,
以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
简单来说,就说避免了命名冲突的问题。1写的跟库冲突.2命名互相之间冲突
#include <iostream>
using namespace std:
int main()
{
cout<<"hello world.">>endl;
return 0;
}
用最熟悉的代码举例,这是使用c++代码写出的hello,world,其中namespace std:代表C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。std就是一个命名空间。
1.1命名空间定义
namespace lxy//在工作中一般以自己名字缩写命名
{
//命名空间可以定义任何变量,函数,类型等等
int m = 9;
int add(int x,int y)
{
return x + y;
}
struct Node
{
struct Node*next;
int val;
};
}
1.2命名空间的嵌套定义
namespace lxy
{
int x = 0;
int y = 0;
int ADD(int m,int n)
{
return m*n;
}
namespace lxy1
{
int c = 1;
int d = 0;
struct Node
{
struct Node*next;
int val;
}
}
}
另外需要提到的是,一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中,使得命名空间的使用更加灵活。
1.3命名空间的使用
命名空间的使用有三种方式,我们用以下的命名空间举例。
namespace lxy
{
int m = 9;
int add(int x,int y)
{
return x + y;
}
struct Node
{
struct Node*next;
int val;
};
}
1.3.1加命名空间名称及作用域限定符::
int main()
{
printf("%d\n",lxy::m);//lxy为命名空间的名字,::为作用域限定符
return 0;
}
1.3.2使用using将命名空间中某个成员引入
每次指定命名空间很不方便,可以直接展开整个命名空间
int main()
{
int c = 0;
lxy::m = 10;
int p = lxy::add(lxy::m, c);
printf("%d", p);
return 0;
}
//总是使用::比较麻烦
using namespace lxy;
int main()
{
int c = 0;
printf("%d\n", add(m, c));
}
//直接展开不需要使用::
1.3.3使用using将命名空间中某个成员引入
直接全部展开,有冲突风险,指定展开可以解决
using lxy::m;
int main()
{
printf("%d", m);
}
2.c++输入输出
hello world程序实现如下
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;
return 0;
}
1. cout:标准输出对象。cin:标准输入对象,也就是输入输出,必须包含<iostream>头文件以及命名空间std。cout,cin相比scanf和printf,不需要手动控制格式,他们可以自动识别变量类型。
2. endl是特殊c++符号,代表换行,同样包含在<iostream>中。
3. <<是流插入运算符,>>是流提取运算符,之后做详细解释。
#include <iostream>
using namespace std;
int main()
{
int a = 0;
double b = 1.232;
char c = 0;
cin >> a;
cin >> c;
cout << a <<' ' << c << endl;
cout << b << endl;
return 0;
}
std命名空间使用
1.日常练习直接写using namespace std:,很方便
2.但是如果使用using namespace std;,标准库就全部暴露,可能造成命名冲突等问题,所以在大型项目开发中,多使用如std::cout方法或using std::cout等方法。