C++

分享:

这些问题仅向选择 C++ 作为其三种主要编程语言之一的开发者显示。

您经常使用哪种(哪些)C++ 标准?

8%

C++98/C++03

31%

C++11

25%

C++14

41%

C++17

23%

C++20

14%

不确定

12%

C++98/C++03

33%

C++11

24%

C++14

41%

C++17

23%

C++20

12%

不确定

9%

C++98/C++03

31%

C++11

24%

C++14

45%

C++17

25%

C++20

12%

不确定

很高兴看到迁移稳步推进。我特别高兴看到游戏开发者接受 C++20,我期待所有游戏平台的支持。供应商实现起来将是一个挑战,但我相信,仅就概念和范围而言这都是值得的。

Guy Davidson

Creative Assembly 工程实践主管

C++20 的采用率让我相当惊讶。情况显然正在发生变化。可以看到,采用新标准的速度比过去快得多。

Jason Turner

C++ 培训师、演讲者、作者YouTuber

我很高兴看到绝大多数用户都在使用过去 5 年的版本。另外,C++11 之前的版本下降到 10% 以下也是个好消息。再过几年,我们就可以停止把它们添加到调查了!

Titus Winters

Google 首席工程师

C++ 标准迁移

42%

否,我不计划迁移到其他 C++ 标准

15%

到 C++11

11%

到 C++14

18%

到 C++17

16%

到 C++20

45%

否,我不计划迁移到其他 C++ 标准

9%

到 C++14

20%

到 C++17

26%

到 C++20

41%

否,我不计划迁移到其他 C++ 标准

30%

到 C++17

29%

到 C++20

47%

否,我不计划迁移到其他 C++ 标准

53%

到 C++20

始终记住,用户散布在标准时间轴上。这样的调查提醒我们编写适用于任何地方的代码,而不仅仅是最新的标准。

Guy Davidson

Creative Assembly 工程实践主管

这让我特别惊讶,因为我还没有看到很多公司要求 C++20 培训。许多人仍然对迁移到 C++17 感到幸运。

Jason Turner

C++ 培训师、演讲者、作者YouTuber

您当前的项目是否计划在未来 12 个月内使用这些 C++20 功能?

48%

概念

43%

模块

32%

协程

3%

其他

29%

56%

概念

46%

模块

30%

协程

2%

其他

28%

53%

概念

53%

模块

42%

协程

1%

其他

23%

我觉得[模块]功能还需要进一步开发,但我期待有结果能证明我是错误的。

Guy Davidson

Creative Assembly 工程实践主管

我希望我们能看到工具赶上来,在接下来的 12 个月内轻松使用模块!

Jason Turner

C++ 培训师、演讲者、作者YouTuber

您最常使用哪款 IDE/编辑器进行 C++ 开发?

28%

Visual Studio

28%

Visual Studio Code

24%

CLion

5%

Vi/Vim

3%

QtCreator

2%

Xcode

1%

Android Studio

23%

Visual Studio

33%

Visual Studio Code

25%

CLion

3%

Vi/Vim

3%

QtCreator

1%

Xcode

2%

Android Studio

43%

Visual Studio

17%

Visual Studio Code

18%

CLion

3%

Vi/Vim

2%

QtCreator

2%

Xcode

1%

Emacs

JetBrains 拥有一系列 C++ IDE,有助于避免通常与 C++ 编码相关的典型陷阱和麻烦:用于跨平台和嵌入式开发的 CLion、适用于 Visual Studio 用户的 ReSharper C++,以及适用于 Unreal Engine 和 C++ 游戏开发者的 Rider

您经常使用哪种(哪些)单元测试框架?

35%

Google Test

26%

我不为 C++ 编写单元测试

17%

我编写单元测试,但不使用任何框架

12%

Catch

9%

CppUnit

7%

Boost.Test

3%

CppUTest

3%

doctest

4%

其他

34%

Google Test

17%

我不为 C++ 编写单元测试

21%

我编写单元测试,但不使用任何框架

14%

Catch

14%

CppUnit

7%

Boost.Test

5%

CppUTest

3%

doctest

4%

其他

21%

Google Test

27%

我不为 C++ 编写单元测试

21%

我编写单元测试,但不使用任何框架

17%

Catch

11%

CppUnit

7%

Boost.Test

3%

CppUTest

4%

doctest

6%

其他

工程师更喜欢编写代码而不是为这些代码编写测试,而且编写测试花费的时间超过真正的长期收益。

Guy Davidson

Creative Assembly 工程实践主管

四分之一的开发者不编写单元测试的统计数据让我很吃惊。我不太在乎您如何表达或您使用什么框架,但我们都需要编写测试。

Titus Winters

Google 首席工程师

您在 C++ 中如何管理第三方库?

25%

库的源代码是我的构建的一部分

24%

我使用指令分别编译这些库

21%

我使用系统软件包管理器

18%

我从网上下载预构建的库

14%

以上皆非,我没有任何依赖项

8%

vcpkg

6%

Conan

6%

Nuget

1%

build2

1%

Hunter

5%

其他

28%

库的源代码是我的构建的一部分

26%

我使用指令分别编译这些库

24%

我使用系统软件包管理器

21%

我从网上下载预构建的库

9%

以上皆非,我没有任何依赖项

4%

vcpkg

5%

Conan

7%

Nuget

1%

build2

7%

其他

34%

库的源代码是我的构建的一部分

25%

我使用指令分别编译这些库

17%

我使用系统软件包管理器

27%

我从网上下载预构建的库

12%

以上皆非,我没有任何依赖项

8%

vcpkg

4%

Conan

7%

Nuget

2%

build2

5%

其他

这里反映了为第三方使用打包 C++ 代码的情况。我期待这个问题得到解决,但我并不乐观。

Guy Davidson

Creative Assembly 工程实践主管

依赖项管理和软件包管理的现状让我很难过。可重现的构建和清晰的依赖链很有价值。这个领域有太多“碰巧有用”的东西。

Titus Winters

Google 首席工程师

您经常使用哪种(哪些)项目模型或构建系统?

57%

CMake

33%

Makefile

33%

Visual Studio 项目

11%

Ninja

9%

Gradle

7%

Xcode 项目

6%

定制构建系统

4%

Qmake

3%

Bazel

2%

Autotools

63%

CMake

43%

Makefile

29%

Visual Studio 项目

15%

Ninja

12%

Gradle

4%

Xcode 项目

4%

定制构建系统

6%

Qmake

2%

Bazel

3%

Autotools

54%

CMake

33%

Makefile

49%

Visual Studio 项目

8%

Ninja

10%

Gradle

9%

Xcode 项目

8%

定制构建系统

3%

Qmake

3%

Bazel

3%

Autotools

我把 CMake 比作 C++ 工程师的斯德哥尔摩综合征。无论如何,它都已经成为事实上的标准,明显领先于竞争对手。

Guy Davidson

Creative Assembly 工程实践主管

您经常使用哪种(哪些)编译器?

67%

GCC

36%

Clang

32%

MSVC

12%

Clang-cl

11%

Intel

7%

适用于微控制器的编译器

6%

IntelLLVM

3%

定制

2%

其他

在 CLion 中,您可以使用基于 GCC 的编译器,以及 Clang、MSVC 和 IAR 编译器。对于罕见或自定义的情况,自定义编译器功能支持 CLion 中的任意编译器。

除 C++ 外,您在项目中还使用哪种(哪些)编程语言?

44%

Python

30%

C

19%

Shell 脚本语言

15%

Java

12%

SQL

11%

JavaScript

11%

C#

9%

HTML/CSS

5%

汇编

5%

Go

Python 作为 AI 和 ML 的编程语言无处不在,因此这里没有惊喜。Numpy 和 Pandas 等优质库的存在使其成为显而易见的选择。也许他们需要标准库中的类似内容,或者我们需要解决打包问题。

Guy Davidson

Creative Assembly 工程实践主管

您或您的团队使用以下哪种(哪些)工具来执行准则或进行其他代码质量或分析?

37%

我的 IDE 提供的工具

24%

Clang-tidy

21%

ClangFormat

17%

Clang-analyzer/Clang Static Analyzer

10%

Cppcheck

7%

Cpplint

6%

SonarLint/SonarQube/SonarCloud

4%

Coverity

2%

PVS-Studio

2%

Parasoft C/C++test

只有 30% 的人避免静态分析,我有理由相信开源代码将变得更加安全。

Guy Davidson

Creative Assembly 工程实践主管

您或您的团队如何运行代码分析?

48%

编译时,通过启用必要编译器检查

26%

它已集成到我们的 CI/CD 管道中

24%

我们从不运行代码分析

20%

我们使用动态分析

17%

通过在开发者机器上运行的第三方静态代码分析器

1%

其他

您使用哪种(哪些)工具或技术来优化您的 C++ 项目构建时间?

42%

优化头 include 和依赖项

30%

预编译头

22%

并行编译源文件

17%

编译器缓存

15%

模块

12%

增量链接

5%

Unity 构建

在这种情况下,小就是美。我很想知道预编译的头、模块和 unity 构建在未来一年左右里如何相互作用。

Guy Davidson

Creative Assembly 工程实践主管

感谢您的参与!

我们真诚地希望您能发现我们的报告有用。与您的朋友和同事分享这份报告。

如果您有任何疑问或建议,请发送电子邮件至 surveys@jetbrains.com