[C++笔记]命名空间,cin cout

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值