目录
1 C++简介
1.1 起源
C++与C语言一样,也是在贝尔实验室诞生的,名称C++来自C语言中的递增运算符++,该运算符将变量加1。这也表明,C++是C语言的扩充版本。
C++融合了3种不同的编程方式:C语言代表的过程性语言、C++在C语言基础上添加的类代表的面向对象语言、C++模板支持的泛型编程。
1.2 C++的基本特点
- 静态类型:C++是一种静态类型语言,即在编译时进行类型检查,这有助于减少运行时错误。
- 编译式:C++程序需要编译成机器语言后才能运行,这通常比解释执行的程序具有更高的运行效率。
- 通用性:C++是一种通用的编程语言,可用于多种领域的软件开发,包括系统/应用软件、游戏开发、设备驱动程序等。
- 大小写敏感:C++区分大小写,这意味着变量名
A
和a
在C++中被视为两个不同的标识符。 - 不规则性:C++的语法相对灵活,允许程序员以多种方式表达相同的逻辑
1.3 C++的应用领域
C++几乎可以创建任何类型的程序,包括但不限于:
- 游戏开发:C++因其高效性而被广泛用于游戏引擎和游戏的开发。
- 设备驱动程序:C++可以直接操作硬件资源,因此常用于编写设备驱动程序。
- 高性能计算(HPC):C++的高运行效率使其成为高性能计算领域的优选语言。
- 云计算:在云计算领域,C++也发挥着重要作用,特别是在需要高效处理大量数据的场景下。
- 桌面和移动应用:C++可以用于开发桌面和移动应用程序,尽管在某些平台上可能不是首选语言。
1.4 C++的编程环境和工具
C++拥有丰富的编程环境和工具支持,包括集成开发环境(IDE)如Visual Studio、Eclipse CDT等,以及编译器如GCC、Clang等。这些工具为C++程序员提供了强大的代码编辑、调试和编译功能。
2 可移植性与标准
C++的可移植性与标准是两个紧密相关的概念,它们共同影响着C++程序在不同系统和平台上的运行效果。
2.1 C++的可移植性
可移植性是指程序在不同的系统上能够正确地运行,而不需要进行任何修改。C++作为一种高度可移植的编程语言,能够在不同的操作系统和硬件平台上运行。然而,为了确保程序的可移植性,需要遵循一些规则和最佳实践:
- 避免使用特定于平台的代码:不同操作系统有不同的API和特性,使用特定于某个平台的API或功能会导致代码不可移植。因此,在编写C++程序时,应尽可能避免使用这类代码。
- 使用跨平台库:跨平台库如Boost、Qt等提供了在不同平台上都能使用的API和功能,使用这些库可以简化代码并提高可移植性。
- 注意文件路径和分隔符:不同操作系统有不同的文件路径规则,如Windows使用反斜杠(\)作为路径分隔符,而Linux和macOS使用正斜杠(/)。在编写C++程序时,应避免硬编码文件路径,而应使用相对路径或跨平台的文件路径库。
- 避免未定义行为:C++标准中定义了一些未定义行为,如未初始化的变量或指针的使用。在编写程序时,应避免这些未定义行为,以确保程序在不同系统上的行为一致。
2.2 C++的标准
C++的标准是由国际标准化组织(ISO)和国际电工委员会(IEC)联合制定的,它规定了C++语言的语法、语义和库函数等。C++的标准经历了多次修订和扩展,目前最新的标准是C++20(发布于2020年)。
C++标准的重要性在于它确保了C++程序在不同编译器和平台上的兼容性和可移植性。遵循C++标准的程序可以在任何支持该标准的编译器上编译和运行,而无需进行任何修改。
C++标准的主要版本包括:
- C++98:第一个国际标准,于1998年发布。它描述了C++的基本特性和库函数,并引入了异常处理、运行时类型识别(RTTI)和模板等特性。
- C++03:C++98的修订版,于2003年发布。它主要对C++98进行了技术性的修订和错误修正,但没有引入新的语言特性。
- C++11:于2011年发布,引入了众多新特性,如自动类型推导(auto)、基于范围的for循环、lambda表达式、智能指针等。这些特性极大地提高了C++的编程效率和代码质量。
- C++14、C++17、C++20等:后续的标准版本在C++11的基础上进一步扩展了C++的功能和特性,如泛型Lambda表达式、结构化绑定、模块等。
总之,C++的可移植性和标准是两个相辅相成的概念。遵循C++标准并遵循一些最佳实践可以确保C++程序在不同系统和平台上的正确性和可移植性。
3 程序的创建
运行一个编写好的C++程序的具体步骤取决于计算机环境和使用的C++编译器,但大体如下(图3.1):
图3.1
1.使用文本编译器编写程序,并将其保存到文件中,这个文件就是程序的源代码。
2.编译源代码。即运行一个程序,编译就是将我们所写的源代码翻译成主机所“看得懂”的内部语言——机器语言。包含了翻译后的程序的文件就是程序的目标代码。
3.将目标代码与其他代码链接起来。例如,C++程序通常使用库,C++库包含一系列的计算机例程(被称为函数)的目标代码。链接指的是将目标代码同使用的函数的目标代码以及一些标准的启动代码组合起来,生成程序的运行阶段版本。包含该最终产品的文件被称为可执行代码。