本期博客是一篇C++基础知识,对后续C++的深入学习,都是有着相当重要的地位❤,内容包含了以下知识:命名空间、C++的输入&输出流、缺省参数、重载函数、引用、inline(内联函数)、nullptr(主要解决C语言NULL类型混淆的问题)
如果这篇博客对大家有帮助,还请点赞收藏❤,感觉大家的支持~,我会更加努力的❤
一、命名空间
1.问题导向
#include<stdio.h>
#include<stdlib.h>
int rand = 1314;
int main()
{
printf("%d\n", rand);
return 0;
}
/*
*这组代码中,就存在了一个不可避免的 会存在编译错误:
*error C2365: “rand”: 重定义;以前的定义是“函数”
*warning C4477: “printf”: 格式字符串“%d”需要类型“int”的参数,但可变参数 1
*拥有了类型“int (__cdecl *)(void)”
*/
不难理解,rand是生成随机数的函数名,其函数的声明存放于头文件<stdlib.h>中,而我们又定义了一个全局变量rand;这就导致了上面的错误,我们称为命名冲突;
- 问:自己写代码的时候,命名稍加注意一下,不就可以了吗?
- 回:虽然你自己写代码的时候,不会发生命名冲突的问题,但你不能保证,多人协作写一个项目的时候,不会出现命名冲突的问题,毕竟每个人的想法都是参差不齐的。
为了解决命名冲突的问题,C++引入了一个新的关键字——namespace,namespace后跟一对{},中间用于变量的定义,函数的声明与定义,类的声明与定义等等;可以为我们在全局域生成一个命名空间域;主要用于解决命名冲突、组织代码、提高代码的可读性和可维护性。
下面的代码,是在域中定义一个malloc为函数名的交换函数,和以rand为变量名的变量。包含头文件<stdlib.h>后,编译器不会报上面的错误。
2.namespace的定义
- namespace的本质,在用途方面,可以类似于电脑分盘(新建文件夹),在不同的盘符(文件夹)中可以定义相同的文件标识;
- 不同的域可以使用相同的标识符,如局部域和作用域,都可以定义变量a;
- 在同一域中,不能出现两个或两个以上的相同的标识符
- 多文件中,存在相同的命名空间域名的时候,编译的时候,会形成同一个域;
- namespace可嵌套使用;
- namespace只可在全局域中使用;
- C