C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本

C++ 简介

  • 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 标准

学习 C++

学习 C++,关键是要理解概念,而不应过于深究语言的技术细节
学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统
C++ 支持多种编程风格。您可以使用 Fortran、C、Smalltalk 等任意一种语言的编程风格来编写代码。每种风格都能有效地保证运行时间效率和空间效率

C++ 的使用

基本上每个应用程序领域的程序员都有使用 C++
C++ 通常用于编写设备驱动程序和其他要求实时性的直接操作硬件的软件
C++ 广泛用于教学和研究。
任何一个使用苹果电脑或 Windows PC 机的用户都在间接地使用 C++,因为这些系统的主要用户接口是使用 C++ 编写的

标准化

发布时间 通称 备注
2017 C++17 第五个C++标准
2017 coroutines TS 协程库扩展
2017 ranges TS 提供范围机制
2017 library fundamentals TS 标准库扩展
2016 concurrency TS 用于并发计算的扩展
2015 concepts TS 概念库,用于优化编译期信息
2015 TM TS 事务性内存操作
2015 parallelism TS 用于并行计算的扩展
2015 filesystem TS 文件系统
2014 C++14 第四个C++标准
2011 - 十进制浮点数扩展
2011 C++11 第三个C++标准
2010 - 数学函数扩展
2007 C++TR1 C++技术报告:库扩展
2006 - C++性能技术报告
2003 C++03 第二个C++标准
1998 C++98 第一个C++标准

编译/执行 C++ 程序

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. cout << "Hello, world!\n";
  5. cout << "Hello, world!" << endl;
  6. cout << "Hello, world!" << endl;
  7. return 0;
  8. }

你可以用 “\n” 代替以上代码里的endl

C++ 在线工具

名称 地址
菜鸟在线编辑器 https://www.runoob.com

本地环境设置

如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器

文本编辑器

这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi
文本编辑器的名称和版本在不同的操作系统上可能会有所不同。例如,Notepad 通常用于 Windows 操作系统上,vim/vi 可用于 Windows 和 Linux/UNIX 操作系统上
通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c
在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它

C++ 编译器

写在源文件中的源代码是人类可读的源。它需要”编译”,转为机器语言,这样 CPU 可以按给定指令执行程序
C++ 编译器用于把源代码编译成最终的可执行程序
大多数的 C++ 编译器并不在乎源文件的扩展名,但是如果您未指定扩展名,则默认使用 .cpp
最常用的免费可用的编译器是 GNU 的 C/C++ 编译器,如果您使用的是 HP 或 Solaris,则可以使用各自操作系统上的编译器

g++ 应用说明

程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字

下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout << "Hello, world!" << endl;
  6. return 0;
  7. }
  1. #最简单的编译方式:
  2. g++ helloworld.cpp
  3. ./a.out #由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行
  4. #用 gcc 来编译链接 C++ 程序
  5. gcc helloworld.cpp -lstdc++ -o helloworld
  6. ./helloworld

通常我们使用 -o 选项指定可执行程序的文件名,以下实例生成一个 helloworld 的可执行文件:

  1. g++ helloworld.cpp -o helloworld
  2. ./helloworld #执行 helloworld

如果是多个 C++ 代码文件,如 runoob1.cpp、runoob2.cpp,编译命令如下:

  1. g++ runoob1.cpp runoob2.cpp -o runoob

生成一个 runoob 可执行文件
g++ 有些系统默认是使用 C++98,我们可以指定使用 C++11 来编译 main.cpp 文件:

  1. g++ -g -Wall -std=c++11 main.cpp

g++ 常用命令选项

选项 解释
-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 生成所有警告信息

安装 GNU 的 C/C++ 编译器

Windows 上的安装

开发工具 描述
Visual Studio IDE 官方地址 https://visualstudio.microsoft.com/zh-hans/
是微软功能完备的 IDE,可用于编码、调试、测试和部署到任何平台
CLion IDE 官方地址 https://www.jetbrains.com/products/?fromMenu#lang=cpp
JetBrains A smart cross-platform IDE for C and C++
MinGW IDE 为了安装 MinGW,请访问 MinGW 下载页面,下载最新版本的 MinGW 安装程序,找格式为 MinGW-.exe
当安装 MinWG 时,您至少要安装 gcc-core、gcc-g++、binutils 和 MinGW runtime,但是一般情况下都会安装更多其他的项
添加您安装的 MinGW 的 bin 子目录到您的 PATH 环境变量中,这样您就可以在命令行中通过简单的名称来指定这些工具
当完成安装时,您可以从 Windows 命令行上运行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具

macOS 上的安装

如果您使用的是 macOS系统,请在命令行使用下面的命令来检查您的系统上是否自带安装了 GCC:

  1. gcc -v

如果未安装 GCC,那么请按照下面详细说明安装 GCC

开发工具 描述
Xcode 编辑器 最快捷的获取 GCC 的方法是从苹果的网站上下载 Xcode 开发环境,并按照安装说明进行安装。一旦安装上 Xcode,您就能使用 GNU 编译器
官方地址 developer.apple.com/technologies/tools/
CLion IDE 官方地址 https://www.jetbrains.com/products/?fromMenu#lang=cpp
JetBrains A smart cross-platform IDE for C and C++
Visual Studio IDE 官方地址 https://visualstudio.microsoft.com/zh-hans/
是微软功能完备的 IDE,可用于编码、调试、测试和部署到任何平台
命令行安装 brew install gcc gcc-c++

UNIX/Linux 上的安装

如果您使用的是 Linux 或 UNIX,请在命令行使用下面的命令来检查您的系统上是否安装了 GCC:

  1. g++ -v

如果您的计算机上已经安装了 GNU 编译器,则会显示如下消息:

  1. 使用内建 specs
  2. COLLECT_GCC=g++
  3. COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
  4. OFFLOAD_TARGET_NAMES=nvptx-none
  5. OFFLOAD_TARGET_DEFAULT=1
  6. 目标:x86_64-redhat-linux
  7. 配置为:../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
  8. 线程模型:posix
  9. gcc 版本 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)

如果未安装 GCC,那么请按照 http://gcc.gnu.org/install/ 上的详细说明安装 GCC

如果你的Linux发行版是Fedora/RedHat/RHEL/CentOS,可以按以下命令行安装

  1. yum -y install gcc gcc-c++