1.命名空间
在以后的工作中一个变量名,函数名等等,可能会有重复用相同的名字这就造成了命名冲突,C语言中就会出现这种情况为了避免命名冲突C++提出了命名空间的概念
#include<iostream>
using namespace std;
int rand = 10;
int main()
{
int rand = 7;
cout << rand << endl;
}
这里报错“rand”是函数,但但当我们把“rand”放到namespace中会这么样呢?
这里可以看到我们自己定义的rand可以正常打印出来而不会报错。这里简单的展示了一下namespace在我们日常写代码的作用,接下来我们从 namespace的定义,用法,特点分析。
1.namespace的定义
1.首先namespace是C++的一个关键字,在namespace后面跟命名空间的名字然后再接一对{},这对花括号中放的就是我们的变量,函数,类型等。注意花括号后面不要接 “ ;”
2.namespace的用法
在C++中有四个域分别是:全局域,局部域,命名空间,类域。在编译的过程中编译器会去寻找变量等的声明,首先他会去在局部域去寻找如果找不到他会去全局去找如果都找不到编译器就会报编译错误,所以直接写在namespace中的变量等也会报错,正确写法是 命名空间名字 :: 变量的名字,比如:
#include<iostream>
using namespace std;
namespace DPY
{
int a=10;
} //注意不要在这里写;
int main()
{
cout << DPY::a << endl;
}
当我们在前缀声明了以后编译器就会在命名空间里寻找了。
3.namespace的特点
1.using展开namespace(在项目中不推荐使用但日常的练习可以展开)
在上面的代码我们可以看见”using namespace std “ std是 标准命名空间(Standard Namespace) 的名称,用于避免标准库中的名称与用户代码或其他库中的名称冲突,标准库中的几乎所有内容(如 cout
、vector
、string
等)都定义在 std 命名空间中。”using namespace std “这句代码的意思是把 std 这个命名空间展开这样我们在后面使用的时候不用再写类似std :: cout这种代码节省时间。
第一幅图展开了命名空间里的一个成员
第二幅图片是把DPY的命名空间全部展开。
这里也展示了命名空间可以部分展开和全部展开但要注意全部和部分展开的写法不一样
2.namespace的嵌套命名空间支持嵌套比如
当命名空间嵌套的时候也要把前面的命名空间的名字带上依然用 :: 使用变量。
3. 项目工程中多个文件同名的namespace会被认为是同一个namespace编译器会把他们放在一起把重复的删除。
2.缺省参数
1. 什么是缺省参数?
缺省参数(Default Arguments)是C++中一种允许函数参数预设默认值的特性。当调用函数时,如果未显式传递某个参数,编译器会自动使用其默认值。这一特性可以简化函数调用,提高代码的灵活性。缺省参数分为半缺省和全缺省,注意这里的半缺省并不是指一半的参数缺省而是指不是全部的参数缺省只要有一个缺省剩下的不缺省都是半缺省
2.如何去实现缺省参数
缺省参数的实现比较简单只需要在函数实现或者在函数声明中在形参后面带上想给他的初始值进行了 ,比如这样写
#include"Test.h"
namespace DPY
{
int a = 10;
int rand = 10;
}
using namespace DPY;
int Add(int a=1, int b=1)
{
return a + b;
}
int main()
{
int ret = Add();
cout << ret << endl;
}
3. 缺省函数的特点
1.缺省参数必须从左到右给
C++规定函数的缺省参数一定要从左到右依次连续缺省中间不能间断。
2.函数声明和定义分离时,缺省参数不能在声明和定义中同时出现并且规定函数声明时给缺省参数
//test.cpp
//f.cpp
//test.h