1
0
wiki/docs/开发/C++/简介.md
2022-02-17 18:01:14 +08:00

136 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 简介
title: 简介
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 | 生成所有警告信息。 |