【初识C++】(关键字,命名空间)


一、C++中的关键字

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、命名空间

命名空间是对于全局变量来说,我们在定义变量或函数时,函数名可能会和库中的函数名产生冲突。
比如:
在这里插入图片描述
报错的意思是:库中存在rand这个函数,而我又定义一个rand这个变量,所以会产生名字的冲突。

为了解决这个问题,C++引入了命名空间这个概念。

而与该命名空间的关键字是:namespace

1.命名空间规则

命名空间搜索规则:局部域->全局域->命名空间域(如果不指定,不会主动去搜索)

首先引入域的概念,学习c语言会知道,有一个域叫做作用域,比如局部作用域和全局作用域。
来看下面的代码:

int a = 10;

int main()
{
	int a = 0;

	return 0;
}

我分别要输出局部作用域的a和全局作用域的a该如何输出?

使用域作用限定符

域作用限定符是: “域名+::” ,两个冒号。
比如这样:

int a = 10;

int main()
{
	int a = 0;
	printf("%d\n", a);
	printf("%d\n", ::a);
	return 0;
}

对于全局作用域来说,想要获取a,直接在a前面加上两个冒号即可,全局域的域名可以省略。

访问命名空间域的方法:
1.展开命名空间域

看下面的代码:

namespace dzt
{
	int a = 5;
}

//int a = 10;

int main()
{
	//int a = 0;
	printf("%d\n", a);
	return 0;
}

这样的代码,假如要输出a,是不行的,编译器报的错误是:
”未声明的标识符“
在这里插入图片描述
所以我们想要获得命名空间域的内容,

using namespace dzt;

我们把这句代码加入到命名空间dzt下面就可以执行了。
这句代码的意思是:展开我的命名空间域dzt。在这里插入图片描述
此时编译不会出现问题。

展开命名空间域 和 #include 的区别

在编译过程中:

展开命名空间域是编译器会去命名空间域搜索。

#include 是将包含的头文件的内容拷贝过来。

二者不同,注意区分。

方法2:指定命名空间对象

//命名空间后面跟名字,这个名字是随便起的。
namespace dzt
{
	int a = 5;
}

//int a = 10;

int main()
{
	//int a = 0;
	printf("%d\n", dzt::a);
	return 0;
}

只需要使用 “域名::指定变量或函数” 这样的访问方式即可。

注意:对于命名空间域来说,展开了命名空间域后,相当于变成全局作用域了
比如:

int a = 10;

namespace dzt
{
	int a = 5;
}

using namespace dzt;

int main()
{
	printf("%d\n", a);
	return 0;
}

有一个全局变量a = 10,现在展开了命名空间域后,相当于全局域有a = 10 和a = 5,此时就会报a不明确的问题。

因为编译器不清楚这个a 到低是全局作用域的a还是命名空间域的a。

可以理解成,命名空间域就像是一堵围墙,一旦展开,相当于把围墙拆掉,围墙内的所有东西便会暴露出来。

总结:不要轻易展开命名空间域。

还有一个需要注意的点:

在不同的文件中创建相同名字的命名空间域,会自动将这些名字相同的命名空间域合并。

2.正确使用命名空间

上面讲过了如何使用命名空间的两种方法。
这里重述一遍:
**
1.使用using namespace 命名空间名称 引入
2.加命名空间名称及作用域限定符
3.使用using将命名空间中某个成员引入**

在之后的学习中,推荐使用第二种和第三种的结合

比如:

namespace dzt
{
	// 命名空间中可以定义变量/函数/类型
	int a = 0;
	int b = 1;

	int Add(int left, int right)
	{
		return left + right;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};
}

using dzt::a

int main()
{
	printf("%d\n", a);
	return 0;
}

在一个命名空间域中,定义了多个变量和结构体以及函数。我们想访问该命名空间域的内容时,尽量不使用完全展开的方法,可以指定搜索某个变量即可。

总结:命名空间的出现是为了解决c语言的命名冲突问题。

三、C++中的输入和输出

C++中使用cout来进行输出,cin进行输入。
比如:

#include<iostream>
//引入库的头文件,该头文件包含cin,cout等关键字
using namespace std;
//让编译器可以去库里面搜索

int main()
{
	double a = 10;
	//cin包括但不限于scanf
	//  >>是流提取运算符
	cin >> a ;
	//cout包括但不限于printf
	// <<是流插入运算符
	cout << a << endl;
	return 0;
}

在C++中的cin和cout是会自动识别类型的,关于如何自动识别,涉及到函数重载问题,后续会讲到。

由于C++是包含C的,所以cin和cout这种输入输出的效率会比C低一点点,因为cin和cout会自动识别类型,涉及到更复杂的实现。

在不同的情况下,可以cin,cout,scanf,printf结合使用。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓富民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值