C++语言简介

C++是一门十分经典的高级程序设计语言,于1979年由C++之父本杰尼·斯特劳斯特鲁普(Bjarne Stroustrup)在AT&T贝尔实验室研发,这门编程语言最初被称为“C with Classes”,顾名思义就是带类的、面向对象的C语言,它保留C语言的高效、灵活和底层操作能力的同时引入了面向对象特性以支撑大型软件工程项目。后来在1983年,该语言被正式命名为C++。C++由于其高性能和系统级的编程能力,目前广泛应用于操作系统、编译器和虚拟机、嵌入式系统、游戏引擎、流媒体处理、高性能计算(HPC)、数据库系统、高频交易系统等关键领域,可以说是计算机软件领域的“基石”。C++语言学习曲线相对陡峭,但掌握这门语言对理解计算机系统底层原理、开发高性能应用程序是非常有价值的。

C++语言的特点

兼容C语言:C++最初就是基于C语言的扩展,因此C++保持了对C语言的兼容性,C++也可以使用面向过程的兼容范式,C++语言和C语言代码可以非常方便的混合编译或是互相调用。操作系统核心或是驱动程序通常都是纯C语言开发的,C++能与其无缝集成,这也是C++得天独厚的优势。

既高性能又能支撑大型项目:C++和C一样是Native的,它会编译为本地机器代码直接执行,而且能直接操作内存,运行效率非常高,这使得C++能写出比Java、Python等“非Native”语言更高性能、低延时的程序。然而C++相比C语言又提供了面向对象、泛型等高级特性的支持,使得C++语言成为了软件开发中少数的几个既能编写高性能程序又能支撑大型软件项目的语言。

不过这里也要注意,使用C++编写的程序就一定比Java、Python性能高吗?这可不一定!举例来说,假设你的任务是从工厂搬砖到建筑工地,使用Java就像是直接开着一辆自卸货车来完成这个任务,你的工具很适合这个任务,你完成的很好。然而如果使用C++,你的工具就像是一堆机械零件而不是一辆自卸货车,你需要先自己造一辆货车再开着自己造的车来完成任务,当然你也可以造火箭来搬砖,但这一切的前提是你造得出来!然而你的水平不够好,你甚至造不出一辆货车,只能造一辆手推车,可想而知这个方案的效率有多低!既然如此,C++就没用了吗?当然也不是这样。如果你的任务是从北极的工厂搬砖到南极的建筑工地,要求一小时内完成,那你还真就得请位“C++大神”造个火箭来完成这件事!

语法层面的复杂性:C++是一门历史悠久的语言,换言之也是个历史包袱极重的语言。和简洁的C语言不同,C++语言的特性非常多,有些特性被证明为是优秀的设计,但也有一些是因各种历史原因保留下来,不推荐用但仍存在于历史遗留项目中的特性。对于一个同样的功能在C++中可能有很多种不同的写法,每个人写出的代码各不相同,有些符合最佳实践,有些部分符合最佳实践,有些虽符合曾经的最佳实践但新版本有更好的写法,有些符合最新版本的最佳实践但其他人看不懂,有些则完全是“能运行但是错误写法”,它们确实就这样乱糟糟的存在于项目中,给代码可读性造成了不小的困难。总而言之,C++项目不仅对成员的代码水平要求很高,还对团队领导者的技术管理水平要求极高,稍有不慎项目就有“代码失控”的可能。

C++标准和编译器

C++标准的制定是由国际标准化组织(ISO)的一个技术委员会负责的,这个委员会被称为ISO/IEC JTC1/SC22/WG21,简称C++标准委员会。委员会的成员包括来自世界各地的C++专家、编译器开发者、学术界人士以及其他相关领域的专业人员。C++标准的更新通常是分阶段进行的,重要版本包括C++98、C++03、C++11、C++14、C++17、C++20等,每个版本都会在原有标准的基础上进行改进或添加新特性。

C++编译器通常由其它组织或公司等基于C++标准来开发,下面列出了一些著名的C++编译器及其开发者:

GCC(GNU Compiler Collection):GCC是一款开源的编译器套件,由GNU项目开发和维护。GCC支持多种编程语言,包括C、C++、Fortran等,它是Linux内核开发团队使用的C编译器,也是Linux操作系统下使用最广泛的编译器软件,在Windows操作系统下也有一个移植版本MinGW被广泛使用。

Clang:最初由苹果公司发起,目前是LLVM项目的一部分。Clang也是一个开源编译器,它注重编译速度和错误诊断信息,对开发者非常友好。Clang编译器是苹果平台下XCode的默认OC编译器,也是Android NDK强制使用的编译器,此外也有很多其它开源项目例如Chromium也采用了Clang编译器。

MSVC(Microsoft Visual C++):MSVC由微软开发的编译器,通常集成在Visual Studio开发环境中使用(也可以单独安装),MSVC广泛用于Windows操作系统下的C++程序开发,相比MinGW它支持一些微软特有的扩展和库,在Windows操作系统下MSVC的地位和GCC之于Linux类似。另外要注意MSVC并不是开源的,MSVC是Visual Studio是一部分,它对个人开发者、开源项目、学术用途和小型团队(年收入或融资不超过100万美元)是完全免费的,但超出该范围的项目则需要购买商业许可。

ICC(Intel C++ Compiler):由英特尔公司开发的商业软件,主要用于在英特尔处理器上进行高性能计算程序编译,对于通用型的软件开发较少使用。

总而言之,对于语言层面的初学者使用GCC、Clang、MSVC没有区别,只有当我们涉及开发具体平台下的应用程序时才需要考虑编译器的选择。如果你要开发Win32程序、COM组件等,MSVC通常是最合适的;如果你要开发Linux下的程序,通常选择GCC或Clang比较合适;如果你要参与某个大型C/C++项目,一般来说这类项目会建议开发者使用某个编译器的某个特定版本,以避免出现兼容性问题。

搭建C++开发环境

在Windows平台下,搭建C++开发环境最简单的方式就是直接安装Visual Studio软件,我们这里直接用Visual Studio 2022创建一个C++空项目。

保持代码风格良好且一致是现代软件开发中的基本要求。在过去我们需要配置IDE的格式化器,不仅操作复杂而且每种IDE的配置方式还不一样。好在现在我们无需纠结了,现在无论Visual Studio、Visual Studio Code还是Clion都支持ClangFormat工具,我们只需要将一个.clang-format文件放置在项目根目录,所有IDE或编辑器都会自动基于ClangFormat规则来格式化代码。

我们这里出于简单起见,直接使用最基础的LLVM风格。当然,C++是非常自由的,你完全可以使用自己的代码风格,我这里的选择主要是因为这种风格的代码密度比较高方便排版。

.clang-format

BasedOnStyle: LLVM

下面我们编写一个最简单的C++程序,我们在Visual Studio中添加一个C++源文件main.cpp,然后写入如下代码。

#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}

点击运行,Visual Studio会自动编译项目中的源代码文件并链接为可执行程序,构建完成后,我们可以看到程序的控制台输出效果。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap