#include<iostream>//包含c++的输入输出流,相当于C的stdlib.h
#include<stdlib.h>
//using namespace std;//展开std, c++库的实现定义在一个叫std的命名空间中以减少命名冲突
//↑不过这样做就等于std白隔离了,大项目视情况用另外两种展开/访问方式比较合适。
//↑平时练习一般无所谓,随便展开
//使用命名空间可以绕开命名冲突
//同一工程内允许存在相同名称的命名空间,编译器会将其合并为同一个命名空间
namespace niokia {
//叫niokia的命名空间。命名空间是域,必须定义在全局
//定义的是全局变量/函数/类型 ,会放到静态区。
//namespace只作域隔离用,不影响全局变量/函数/类型的其他属性。
//不可以在namespace域内进行给变量赋值等操作,只能定义时初始化
int rand =10;
int Add(int left, int right) {
return left + right;
}
struct Node1
{
struct Node1* next;
int val;
};
struct Node2
{
struct Node2* next;
int val;
};
namespace N1 {//命名空间可以嵌套定义
int a;
int b;
int Sub(int left, int right) {
return left - right;
}
}
}
int a = 0;
using niokia::Node2;//可以展开命名空间中常用的
using std::cout;
using std::cin;
using std::endl;
//using namespace niokia;//全部展开命名空间,相当于使命名空间隔离失效,慎用
int main() {
printf("%d\n", rand);//这个rand访问的是stdlib中函数的地址,优先顺序为就近原则:局部域->全局域
printf("%d\n",niokia::rand);//访问了命名空间 ::叫域作用限定符,用于指定域
int a = 1;
printf("%d\n",::a);//访问了全局域中的a,::左边空白(不是特指空格,可以啥都没)代表全局域
struct niokia::Node1 node;
niokia::Add(1, 2);
niokia::N1::Sub(4, 3);
cout << "hello world" << endl;//cout是一个全局的对象,<<是流输出(流插入)运算符,endl是换行
cout << "hello world\n";//↑等价
printf("hello world\n");//↑等价
//c++和c的输入输出可以混在一起写,哪个方便用哪个
int i = 1;
double d = 2.22;
cout << i << " " << d << endl;//cout可以自动识别类型,不需要指定%d之类的。
//只不过,控制小数点位数还是printf操作起来便利些
cin >> i >> d;//>>是流提取运算符,cin也是自动识别类型,相当于scanf
cout << i << " " << d << endl;
return 0;
}
[C++笔记]命名空间,cin cout
于 2022-01-25 20:45:10 首次发布