2022-02-17 18:01:14 +08:00
|
|
|
|
---
|
|
|
|
|
id: 简介
|
|
|
|
|
title: 简介
|
2022-02-18 15:56:58 +08:00
|
|
|
|
sidebar_position: 1
|
2022-02-17 18:01:14 +08:00
|
|
|
|
data: 2022年2月17日
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 简介
|
|
|
|
|
|
|
|
|
|
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
|
|
|
|
|
|
|
|
|
|
C++ 被认为是一种**中级**语言,它综合了高级语言和低级语言的特点。
|
|
|
|
|
|
|
|
|
|
C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。
|
|
|
|
|
|
|
|
|
|
C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
|
|
|
|
|
|
|
|
|
|
**注意:**使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。
|
|
|
|
|
|
|
|
|
|
### 面向对象程序设计
|
|
|
|
|
|
|
|
|
|
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:
|
|
|
|
|
|
|
|
|
|
- 封装
|
|
|
|
|
- 抽象
|
|
|
|
|
- 继承
|
|
|
|
|
- 多态
|
|
|
|
|
|
|
|
|
|
### 标准库
|
|
|
|
|
|
|
|
|
|
标准的 C++ 由三个重要部分组成:
|
|
|
|
|
|
|
|
|
|
- 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
|
|
|
|
|
- C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
|
|
|
|
|
- 标准模板库(STL),提供了大量的方法,用于操作数据结构等。
|
|
|
|
|
|
|
|
|
|
### ANSI 标准
|
|
|
|
|
|
|
|
|
|
ANSI 标准是为了确保 C++ 的便携性 —— 您所编写的代码在 Mac、UNIX、Windows、Alpha 计算机上都能通过编译。
|
|
|
|
|
|
|
|
|
|
由于 ANSI 标准已稳定使用了很长的时间,所有主要的 C++ 编译器的制造商都支持 ANSI 标准。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 标准化
|
|
|
|
|
|
|
|
|
|
| 发布时间 | 文档 | 通称 | 备注 | |
|
|
|
|
|
| -------- | --------------------- | ------ | ------------------- | ---- |
|
|
|
|
|
| 2015 | ISO/IEC TS 19570:2015 | - | 用于并行计算的扩展 | |
|
|
|
|
|
| 2015 | ISO/IEC TS 18822:2015 | - | 文件系统 | |
|
|
|
|
|
| 2014 | ISO/IEC 14882:2014 | C++14 | 第四个C++标准 | |
|
|
|
|
|
| 2011 | ISO/IEC TR 24733:2011 | - | 十进制浮点数扩展 | |
|
|
|
|
|
| 2011 | ISO/IEC 14882:2011 | C++11 | 第三个C++标准 | |
|
|
|
|
|
| 2010 | ISO/IEC TR 29124:2010 | - | 数学函数扩展 | |
|
|
|
|
|
| 2007 | ISO/IEC TR 19768:2007 | C++TR1 | C++技术报告:库扩展 | |
|
|
|
|
|
| 2006 | ISO/IEC TR 18015:2006 | - | C++性能技术报告 | |
|
|
|
|
|
| 2003 | ISO/IEC 14882:2003 | C++03 | 第二个C++标准 | |
|
|
|
|
|
| 1998 | ISO/IEC 14882:1998 | C++98 | 第一个C++标准 | |
|
|
|
|
|
|
|
|
|
|
## g++ 编译器
|
|
|
|
|
|
|
|
|
|
程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ gcc main.cpp -lstdc++ -o main
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
#include <iostream>using namespace std;int main(){
|
|
|
|
|
cout << "Hello, world!" << endl;
|
|
|
|
|
return 0;}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
最简单的编译方式:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ g++ helloworld.cpp
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ ./a.outHello, world!
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
通常我们使用 **-o** 选项指定可执行程序的文件名,以下实例生成一个 helloworld 的可执行文件:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ g++ helloworld.cpp -o helloworld
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
执行 helloworld:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ ./helloworldHello, world!
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
如果是多个 C++ 代码文件,如 runoob1.cpp、runoob2.cpp,编译命令如下:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ g++ runoob1.cpp cpp、runoob2.cpp -o runoob
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
生成一个 runoob 可执行文件。
|
|
|
|
|
|
|
|
|
|
g++ 有些系统默认是使用 C++98,我们可以指定使用 C++11 来编译 main.cpp 文件:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
g++ -g -Wall -std=c++11 main.cpp
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 常用命令选项
|
|
|
|
|
|
|
|
|
|
| 选项 | 解释 |
|
|
|
|
|
| ------------ | ------------------------------------------------------------ |
|
|
|
|
|
| -ansi | 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。 |
|
|
|
|
|
| -c | 只编译并生成目标文件。 |
|
|
|
|
|
| -DMACRO | 以字符串"1"定义 MACRO 宏。 |
|
|
|
|
|
| -DMACRO=DEFN | 以字符串"DEFN"定义 MACRO 宏。 |
|
|
|
|
|
| -E | 只运行 C 预编译器。 |
|
|
|
|
|
| -g | 生成调试信息。GNU 调试器可利用该信息。 |
|
|
|
|
|
| -IDIRECTORY | 指定额外的头文件搜索路径DIRECTORY。 |
|
|
|
|
|
| -LDIRECTORY | 指定额外的函数库搜索路径DIRECTORY。 |
|
|
|
|
|
| -lLIBRARY | 连接时搜索指定的函数库LIBRARY。 |
|
|
|
|
|
| -m486 | 针对 486 进行代码优化。 |
|
|
|
|
|
| -o | FILE 生成指定的输出文件。用在生成可执行文件时。 |
|
|
|
|
|
| -O0 | 不进行优化处理。 |
|
|
|
|
|
| -O | 或 -O1 优化生成代码。 |
|
|
|
|
|
| -O2 | 进一步优化。 |
|
|
|
|
|
| -O3 | 比 -O2 更进一步优化,包括 inline 函数。 |
|
|
|
|
|
| -shared | 生成共享目标文件。通常用在建立共享库时。 |
|
|
|
|
|
| -static | 禁止使用共享连接。 |
|
|
|
|
|
| -UMACRO | 取消对 MACRO 宏的定义。 |
|
|
|
|
|
| -w | 不生成任何警告信息。 |
|
|
|
|
|
| -Wall | 生成所有警告信息。 |
|