c++命名空间与输入输出
1、背景:在C/C++中,变量、函数和类都大量存在,这些变量、函数和类的名称都存在于全局作用域中,可能导致很多冲突。
2、命名空间的目的:对标识符的名称进行本地化,以避免命名冲突或名字污染。
3、命名空间的定义:使用namespace关键字,后边跟命名空间的名字,然后接一对{}即可(注:{}后无;)
//命名空间中可以定义变量、函数、类型,也可以嵌套结构体
namespace M
{
int rand = 9;
int Add(int left, int right)
{
return left + right;
}
struct ListNode
{
int val;
struct ListNode* next;
};
namespace N
{
double a = 0;
int Sub(int left, int right)
{
return left - right;
}
}
}
4、同一工程中允许存在多个相同名称的命名空间,编译器最后会整合成同一个命名空间。
//两个文件中的namespace会合并成一个
//test.h
namespace N1
{
double a = 0;
int Sub(int left, int right)
{
return left - right;
}
}
//test.cpp
namespace N1
{
int Add(int left, int right)
{
return left + right;
}
struct ListNode
{
int val;
struct ListNode* next;
};
}
4、命名空间的使用
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限在该空间中,因此不能直接使用,使用方法有三种:
- 加命名空间名称及作用域限定符
int main()
{
printf("%d\n",N::a);
}
- 使用using将命名空间中某成员引入
using N::b;
int main()
{
printf("%d\n",N::a);
printf("%d\n",b);
}
- 使用using namespace 命名空间名称 引入
using namespace N;
int main()
{
printf("%d\n",a);
printf("%d\n",b);
}
5、C++输入&输出
//完整步骤
#include<iostream>
//写法1
using namespace std;
//写法2
//using std::cout;
//using std::cin;
int main()
{
int a = 0;
double b = 0;
char c;
cin>>a>>b>>c;
cout<<a<<" "<<b<<" "<<c<<endl;//endl实现自动换行
return 0;
}
说明
- 使用cout标准输出对象和cin标准输入对象时,必须有#include和按命名空间使用方法使用std。
- <<是流插入运算符,>>是流提取运算符
- 无需写类型,会自动判断类型
- 平常练习时写using namespace std,但在很庞大的项目工程中需要哪个写哪个,例如using std::cout。