1

我试图利用预编译的标头来加快以下链接的编译速度:https ://codeforces.com/blog/entry/53909

我观察到头文件的预编译和 .cpp 程序的后续编译必须使用相同的 g++ 标志来完成,以加快工作速度,这是有道理的。但是,将 c++ 标准显式设置为默认标准是行不通的。g++ stdc++.h因此,使用和后续的预编译都没有g++ -std=c++14 program.cpp,也没有g++ -std=c++14工作g++ program.cpp

这对我来说没有意义,因为我知道我的编译器 x86_64-w64-mingw32-g++.exe(gcc 版本 10.2.0)默认符合 201402L(c++14)标准,我想使用g++ -dM -E -x c++ /dev/null | fgrep __cplusplus,并得到以下响应:

#define __cplusplus 201402L

所以,我的问题是,当 g++ 默认遵循 201402L 时,g++ 和 g++ -std=c++14 有什么区别?另外,对我来说,专门选择其中任何一个是否足够重要?

4

1 回答 1

2

GCC 默认不编译-std=c++14GCC 手册页(对于 9.3.0 版)中对-std标志的描述说

-std=确定语言标准。当前仅在编译 C 或 C++ 时支持此选项。

编译器可以接受几个基本标准,例如 c90 或 c++98,以及这些标准的 GNU 方言,例如 gnu90 或 gnu++98。当一个基本标准被指定时,编译器接受所有遵循该标准的程序,以及那些使用与它不矛盾的 GNU 扩展的程序。
. . .
必须提供此选项的值;可能的值为
. . .
c++14
c++1y
    2014 ISO C++ 标准加上修正。名称 c++1y 已弃用。

gnu++14
gnu++1y
    -std=c++14 的 GNU 方言。 这是 C++ 代码的默认设置。 名称 gnu++1y 已弃用。
. . .

强调我的。当前的默认值为-std=gnu++14,它以 C++14 标准为目标,同时还启用了 C++ 语言的GNU 扩展。-std=c++XX标志和-std=gnu++XX标志之间的区别在 -std=c++11 和 -std=gnu++11 之间有什么区别?.

于 2021-04-19T20:08:43.167 回答