文章目录
前言
这将是我学C++写的第一篇文章,以后将会按照我在课堂上学习的顺序进行文章更新(不能保证把每节课的内容全部写成博客),用于做知识复习和 技术分享。
其实,此前学C的时候,我一篇文章也没写过,因为太懒了。越到了后面越知道,懒是要付出代价的。课后没有将知识进行总结归纳,过个几天就全部忘个精光了,想复习都不知道从哪儿下手。还有就是看着同一水平一起开始学习的人,从学完C语言,人家差距拉了你不止一两个层次,自己已经是个吊车尾了。我也在想如何才能追赶上他们的脚步,也发现了优秀之人在学习上优点的共同之处:1)他们很善于总结,将课上知识点能进行很细致的梳理,写成文章博客。2)他们动手能力很强。课上老师讲的写的代码,他们课后都会自己再敲一遍甚至更多,做完作业还能自己去力扣和牛客网刷题。3)他们真的很努力。听完一遍课再听一遍梳理知识,课上代码敲一遍,然后写成博客,我觉得对我来说不休息的话至少也得七个小时往上,然后别人还去刷题、超前学习,也就是说别人一天大半的时间拿来学编程。而我还在认为上课能听得懂就行(现实是上课也不能完全听懂),课后动手敲代码少之又少,那差距不就是这样被人拉出来了吗。
C++关键字
C语言有32个关键字,因为C++兼容C,C++在C的基础上增加至63个关键字,差不多是C语言的两倍。
关键字namespace
我们写C++文件一开头总看见这两句
#include <iostream>
using namespace std;
一行是包头文件,另一行又是什么东西?我们需要认识一下命名空间的概念
命名空间
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。例如,一个大型项目由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名重名的情况。命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
命名空间的定义
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中包含的即为命名空间的成员。
1. 普通的命名空间
namespace N1 // N1为命名空间的名称
{
// 命名空间中的内容
int a;//可以定义变量
int Add(int x, int y)//也可以定义函数
{
return x + y;
}
}
2. 命名空间可以嵌套
namespace N1
{
int a;
int Add(int x, int y)
{
return x + y;
}
namespace N2
{
int a;
int Add(int x, int y)
{
return x + y;
}
}
}
3. 命名空间名称可以相同
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
注意:定义一个命名空间相当于定义了一个新的作用域 ,命名空间中的所有内容都局限于该命名空间中,(定义的内容实际上还是全局变量,是放到静态区的(函数参数、局部变量是在栈区),限定在命名空间域里,别人在全局上是找不到的)
namespace N
{
int a = 10;
int Add(int x, int y)
{
return x + y;
}
}
int main()
{
printf("%d\n", a); // 该语句编译出错,无法识别a
return 0;
}
在编译的时候,编译器去找变量a,会优先从局部域找,找不到再去全局域找(都有定义的情况下局部优先)
还要注意的一个点是,命名空间的变量不能赋值
namespace N
{
int a = 10;
a = 100;//这样是编不过的
}
至于为什么,涉及的一些东西比较底层,我暂时也没弄明白
命名空间的使用
那么我们想要使用命名空间里定义的东西应该怎么用呢?
1. 加命名空间名称及作用域限定符
int main()
{
printf("%d\n", N::a);
return 0;
}
2. 使用using将命名空间中成员引入
using N::a;
int main()
{
printf("%d\n", a);
return 0;
}
使用 using 相当于把命名空间N里定义的变量a暴露在了全局域里
3. 使用using namespace 命名空间名称引入
using namespce N;
int main()
{
printf("%d\n", a);
Add(10, 20);
return 0;
}
这样就相当于把命名空间N整个域的内容全部暴露在全局里了,就可以当做全局的东西使用了
C++标准库中的函数或者对象都是在命名空间std中定义的,这样我们就知道 using namespace std; 到底是什么含义了。
不过一般在做大项目的时候,不建议全部展开,不安全因素会变大,一般是用什么展开什么。但一般在自己学习练习的时候不太讲究,一般全展开。