
高贵的衬衫
07-30 15:26
C++
C++
# 一、C++历史介绍
```mermaid
flowchart LR
id1[(<font color=#</font>C++历史介绍)]
```
C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统。此时,C语言又被称为 K&R C。其中,K 表示 Kernighan 的首字母,而 R 则是 Ritchie 的首字母。
C语言一般分为GUN C 、ANSI C、标准C,在了解这几个术语对应的C标准之前,我们需要先了解三个组织,分别是自由软件基金会,美国国家标准学会以及国际标准化组织。下面对其三个组织进行简单说明:
- 自由软件基金会:是美国的一个民间非营利组织,致力于推进自由软件,其中linux与gnu就是由这个组织在维护。
- 美国国家标准学会:听名字就知道这是美国用于制定自己国家标准各类标准的组织(政府组织)
- 国际标准化组织:作用同美国国家标准协会相似,只是这个组织的目标更远大一些,致力于制定国际标准。
其中GNU C 是软件自由基金会制定的标准,ANSI C 是由美国国家标准学会制定的标准,而ISO C则是由国际标准化组织制定的标准,当前是一个国际化的时代,都在追求标准,那么这个标准化肯定不能是某一个国家的标准,那么这个标准肯定要有国际标准化组织来制定,所以我们常说的标准C其实就是ISO C,下面统称为标准C。
大约在90年代,美国国家标准学会与国际标准化组织相互接纳吸收对方的标准,所以当前标准C 与ANSI C的标准其实是一样的。GNU C 主要应用于linux开发,比标准C支持更多的特性,使用起来更加灵活,所以 标准C = ISO C = ANSI C ≠ GNU 。
# 二、命名空间
## 2.1.C与C++对比
```mermaid
flowchart LR
id1[(<font color=#</font>C与C++对比)]
```
```mermaid
flowchart LR
id1><font color=#FFF0</font>首先回顾一下C语言中第一次敲过的代码hello world]
```
```c
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
```
```mermaid
flowchart LR
id1><font color=##FF149</font>然后引出C++中打印hello world的形式]
```
```cpp
#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
return 0;
}
```
```mermaid
flowchart TD
id1[\<font color=#FFD700</font>经过对比可以很清楚看到有以下三点不同\]
```
> - 包含的头文件不同
>> 1. C包含的头文件是#include<stdio.h>
>> 2. C++包含的头文件是#include< iostream >
> - C++相比于C多了一行using namespace std;
> - 两者的打印形式不同
> >1. C的打印形式是printf("hello world\n");
> > 2. C++的打印形式是cout << "hello world" << endl;
## 2.2.命名空间的引入
```mermaid
flowchart LR
id1[(<font color=#</font>命名空间的引入)]
```
> 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的
```mermaid
flowchart LR
id1><font color=#FFF0</font>代码示例]
```
```c
#include<stdio.h>
int rand = 0;
int main()
{
printf("%d\n", rand);
return 0;
}
```
>当用C打印一个变量时,大多数是可以的,但是也有意外就像rand,都知道rand在库中是一个函数当包含了相应的头文件就会发生命名冲突的问题而导致无法打印
```mermaid
flowchart LR
id1><font color=##FF149</font>效果演示]
```
>***==可以看到当包含了对应的头文件就会造成冲突,给出的报错是rand重定义,以前的定义是函数==***
C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
```mermaid
flowchart LR
id1[[<font color=#FFD700</font>C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决]]
``
Comments0
Creator