1.关键字
C++有63个关键字,C语言有32个关键字,tips:具体关键字在后续知识里面会逐一了解到的,不需要刻意去记。
2.命名空间
命名空间的提出是为了解决C语言中那些命名污染,这么说吧,一个大工程每个人都用很多的a呀nums呀,放在一个项目里面就会产生命名冲突,命名空间的提出大大解决了这个问题,可以多人协作,减少了很多的工作量。
2.1命名空间的定义
定义命名空间,需要使用到
namespace
关键字
,后面跟
命名空间的名字
,然
后接一对
{}
即可,
{}
中即为命名 空间的成员。tips:一个命名空间就是新的作用域,该空间的所有内容都局限于在这个作用域中。
定义命名空间,可以单独直接定义如N1,也可以嵌套定义如N2和N3,也可以在同一文件中多次定义某一个命名空间,系统最后会将他们合并为一个命名空间。
namespace N1//N1是命名空间的名称
{
//命名空间里面可以定义变量和函数
int ADD(int left, int right)
{
return left + right;
}
int x = 0;
}
namespace N2
{
int x = 0;
int ADD(int left, int right)
{
return left + right;
}
//可以嵌套定义
namespace N3 {
int x = 5;
}
}
namespace N1
{//可以合并
int y = 0;
}
int main()
{
cout << N2::x;
cout << N1::y;
cout << N2::N3::x;
return 0;
}
而命名空间的使用可以直接加空间名称和作用限定符比如N1::X;
也可以直接将命名空间引入进来比如using N1;或者using N1::X;
简单来说,命名空间的使用有三种方式:
1.加命名空间名称及作用域限定符
cout << N2::x;
2.使用using将命名空间中成员引入
using N1::x;
3.使用using namespace 命名空间名称引入
using namespace N1;
3.输入输出
使用
cout
标准输出
(
控制台
)
和
cin
标准输入
(
键盘
)
时,必须
包含
< iostream >
头文件
以及
std
标准命名空 间。
2.
使用
C++
输入输出更方便,不需增加数据格式控制,比如:整形
--%d
,字符
--%c ,数据类型自动识别,非常方便。
4.缺省参数
缺省参数是
声明或定义函数时
为函数的
参数指定一个默认值
。在调用该函数时,如果没有指定实参则采用该 默认值,否则使用指定的实参。就类似于备胎,嗯,很对。
注意事项:半缺省参数,只能从右往左依次给,不能间隔给,要不然编译器识别不了,C语言不支持这个语法,缺省参数不能在定义和声明中同时出现要不然也会引起歧义,缺省值必须是全局遍历或者常量。
4.1两种缺省参数
void TestFunc(int a = 0)
{
cout<<a<<endl;
}
int main()
{
TestFunc(); // 没有传参时,使用参数的默认值
TestFunc(10); // 传参时,使用指定的实参
}
1.全缺省
void TestFunc(int a = 10, int b = 20, int c = 30)
2.半缺省
void TestFunc(int a, int b = 10, int c = 20)
5.引用
5.1引用的定义
先正经说说其定义,引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它 引用的变量共用同一块内存空间。其实就是取一个绰号,咱们都学语言这么久了,给一些变量取一些好听的名字没有什么问题吧,隔壁老王(暗指给看这篇文章的你起的别名)。
5.2引用的特性
1.引用定义时必须初始化(要不然你给谁起绰号呀????)
2.一个变量可以有多个引用(名声太好啦,多来几个好的称呼也是可以的,毕竟我这么牛逼对叭)
3.引用一旦引用一个实体,再不能引用其他实体。(要专一都共用一块内存空间了。)
tips:提一嘴常引用,本身是常量,他的引用也肯定是常引用呀,前面加一个const
5.3使用场景
1.做参数
这里拿交换两个数的函数来做比较,这样我们写Swap(x1,x2)就可以实现交换这两个数值的效果,比起C语言的指针变量方便多了。
void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
2.做返回值
int& Count()
{
static int n = 0;
n++;
// ...
return n;
}
5.4指针和引用的区别
在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。
引用和指针的不同点
:
1.
引用
在定义时
必须初始化
,指针没有要求
2.
引用
在初始化时引用一个实体后,就
不能再引用其他实体
,而指针可以在任何时候指向任何一个同类型
实体
3.
没有
NULL
引用
,但有
NULL
指针
4.
在
sizeof
中含义不同
:
引用
结果为
引用类型的大小
,但
指针
始终是
地址空间所占字节个数
(32
位平台下占 4个字节
)
5.
引用自加即引用的实体增加
1
,指针自加即指针向后偏移一个类型的大小
6.
有多级指针,但是没有多级引用
7.
访问实体方式不同,
指针需要显式解引用,引用编译器自己处理
8.
引用比指针使用起来相对更安全