1. namespace
namespace 关键字 命名空间
意义:
1.避免在多个代码片段(如不同人编写的代码或调用的已有代码片段)同时使用时,由于不同代码间变量名相同而造成的冲突。
2.可以帮助我们区分不同库中相同名称的函数、类、变量等,通过建立互相分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。此外,命名空间也是一种机制,可以将系统中的大量类库有序地组织起来,使得类更容易被使用和管理。
方式一 指定访问:
查找顺序:
若要用变量,函数等... ,我们查找的顺序如何? 我们形象比喻一下,
1.在当前局部域找:自留地
2.在全局域找:村子野地
3.在命名空间域找(前提要允许找):别人家的地(经过允许:ns::a)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//避免命名冲突
//命名空间域
namespace ns
{
//变量
int a = 1000;
//函数
int ADD(int x, int y)
{
return x + y;
}
//结构体
struct Node
{
struct Node* next;
int val;
};
}
namespace nc
{
//变量
int a = 567;
//函数
int ADD(int x, int y)
{
return (x + y) * 10;
}
}
int a = 100;
int main()
{
int a = 10;
printf("%d\n", a);
//::域作用限定符
// ::的左边为空则为全局变量
printf("%d\n", ::a);
printf("%d\n", ns::a);
printf("%d\n", nc::a);
printf("Hello world\n");
int ret1 = ns::ADD(5, 6);
int ret2 = nc::ADD(5, 6);
printf("%d\n", ret1);
printf("%d\n", ret2);
//结构体类型
struct ns::Node node1;
}
结果
命名空间也可以嵌套:
结果:
方式二 展开命名空间:
通俗易懂点:随便用,公共的
使用格式:using namespace + 名字;
查找顺序 1.在当前局部域找:自留地
2.在全局域找:村子野地
3.与2. 统一等级 :在命名空间域找(允许找,公共的):别人家的地(菜地里的菜谁 想要谁来采摘)
注意:全局的和命名空间展开的 有同名的变量名,函数名等.... 没问题;
两个命名空间的展开 前提:有同名的变量名 函数名等.... 错误,编译器不知道使用哪个 。
命名空间展开用起来很方便,也很致命, 所以,不要随意展开命名空间 (在日常使用,方便)
方式三 指定展开命名空间域的某一个:
通俗一点:比如是王大爷家的地,地里有很多水果,他只让你摘苹果,其他不开放
使用格式:using + "命名空间域的名字" + "里面的变量,函数等...."
2.目前学了几个域?
1.局部域
2.全局域
3.命名空间域
解释:不同的域可以定义同名的变量,函数,类型;
1 和 2 影响生命周期,3不影响;
3属于全局变量里面的(只是在全局域里面括起来一块自己的空间)
3.流插入/流提取
注意:1.C++ 兼容 C ,cout ,cin / printf ,scanf 可以混用
2.目前,像 如何去控制精度等等...... C++ 有点麻烦,C++有自己相关的函数,就可以用 C
4.缺省参数
缺省参数的分类:
1.全缺省
2.半缺省(缺省一部分,并且只能从左往右缺省)
注意:缺省参数不能在函数声明和定义中同时出现,规定缺省参数在声明给;
缺省值必须是常量或者全局变量:
C语言不支持(编译器不支持)。