用 C++11 编译比用 C++98 慢吗?

Is compiling with C++11 way slower than with C++98?

我想将我的项目设置从 C++98 切换到 C++11,但由于额外的编译时间,我非常怀疑。

我的(比较大的)项目大约有800个文件,项目是用cmake生成的。在 XCode 中,使用 C++98 设置,它在 i7 4GHz 机器(SSD 硬盘,16GB 内存)上编译大约需要 15 分钟。

切换到 C++11 大约需要 25 分钟(在 Windows 和 Visual Studio 2013 上更糟 - 时间几乎翻倍!)

我不知道,我的项目设置或我的文件一定是完全错误的,因为没有人在谈论 C++11 的额外编译时间。

是的,我正在使用前向声明、pimpl 习语,甚至尝试了双重包含防护,并且由于 C++11,我删除了很多我不再需要的模板内容(因此编译应该更快,但它不是 - 它更慢!)

使用 C++11 编译是否比使用 C++98 慢?为什么没有人谈论这个?

你的问题没有通用的答案,这是一个实现的问题。

一些编译器比其他编译器更快。 Phoronix 声称 Zapcc is faster 比它的竞争对手(但我不知道,我以前从未听说过 zapcc)。

我猜想,对于 same 编译器,编译 C++11 风格可能比编译 C++03 风格慢(因为 C++11 引入了额外的 "syntax overloading" 和 auto,以及可能需要额外支持的移动构造函数等功能)

C++11 的编译速度很慢,特别是因为标准头文件(如 <map><vector> ....)带来了很多 material (在 C++11 中可能比在 C++03 中更多)。

例如下面的e.cc文件(只有两个标准包含!):

#include <vector>
#include <map>

使用 g++ -std=c++11 -C -E e.cc | wc -l 编译时,我得到 41870 行预处理,使用 g++ -std=c++03 -C -E e.cc | wc -l 编译时,我得到 15598 行,均使用 GCC 5.3,在 Linux/Debian/Sid/x86-64 上。

您可以使用预编译头文件(参见 this),并且您可以考虑使用不太小的翻译单元(例如,让您的 *.cc 文件每个包含几千行,而不是几十行每行)。

由于 cmake 正在为 make 生成 Makefile-s,您可以尝试使用 make -j

进行并行构建