目录
前言
C++ 与 C 语言的区别
C 语言的命名冲突问题
C++ 的命名空间
前言
从3月份开始记录博客,到如今也有8个月了,在这期间我学习了 C 语言,学习了数据结构初阶
接下来要学习的是 C++ ,而 C++ 是从 C 语言衍生而来的,所以 C++ 兼容 C 语言
最开始以 C++ 和 C 语言的区别学起走,到后面会深入讲解到 C++ 的各种内容
C++ 与 C 语言的区别
区别一:文件后缀
C 语言文件的后缀
test.c
C++ 文件的后缀
test.cpp
vs 编译器的原则是根据后缀来调用不同的编译器的,如果是 .c 的后缀,那么就是调用 .c 的编译器,如果是 .cpp 的后缀,那么就是调用 c++ 的编译器
区别二:在控制台上打印
C 语言打印
printf("hello world\n");
C++ 打印
cout << "hello world" << endl;
在 cpp 文件中,使用 printf 函数同样可以打印,因为 C+ 兼容 C 语言
验证:
C++ 中的 cout 和 endl 是要根据命名空间来定义的,否则就会编译不通过
C 语言的命名冲突问题
#include<stdio.h>
#include<stdlib.h>int rand = 0;int main()
{printf("hello world\n");printf("%d\n", rand);return 0;
}
可以看到,定义了一个全局变量 rand,然后再以 %d 的形式打印 rand 变量
正常情况下,会打印一个 "hello world" 和 一个数字 0
但是结果大相径庭:
报错中说:rand 被重定义了,以前的定义是“函数”
通过头文件可以发现,rand 在 #include<stdlib.h> 头文件中是函数
那么也就是说,我们定义的全局变量 rand 在 #include<stdlib.h> 这个头文件中是函数,导致了命名的冲突,所以才会报错
为了解决以上的问题,在 C++ 中才有了命名空间的概念
C++ 的命名空间
语法展示:
namespace rjj
{int rand = 0;
}
namespace 是命名空间的关键字
后面跟着的 rjj 可以看作是变量名,变量名随意取名都可以,但最好取有意义的名字
在大括号里面就是命名空间的内容,也就是需要避免命名冲突的变量
注意:大括号后面不需要加分号
语法使用:
printf("%d\n", rjj::rand);
不是将 rand 变量放入命名空间后,就能直接编译打印了,因为编译器一般是在全局或者先在头文件中查找,那么就还是会编译报错
所以是要通过 "::" 这个符号才能得到命名空间里的数据
"::" 这个符号为:域作用限定符;那么也就是说可以把命名空间看作是一个域,想要在命名空间里面找到数据就得使用域作用限定符才能查找
语法验证: