簡體   English   中英

當默認標准為 201402L (c++14) 時,g++ 是否與 g++ -std=c++14 不同?

[英]Is g++ different than g++ -std=c++14 when the default standard is 201402L (c++14)?

我試圖利用預編譯的頭文件來加快以下鏈接的編譯速度: https://codeforces.com/blog/entry/53909

我觀察到頭文件的預編譯和.cpp 程序的后續編譯必須使用相同的 g++ 標志來完成,以加快工作速度,這是有道理的。 但是,將 c++ 標准顯式設置為默認值不起作用。 So, neither of pre-compilation using g++ stdc++.h and subsequent g++ -std=c++14 program.cpp , nor, g++ -std=c++14 and g++ program.cpp worked.

這對我來說沒有意義,因為我知道我的編譯器 x86_64-w64-mingw32-g++.exe(gcc 版本 10.2.0)默認符合 201402L(c++14)標准,我想使用g++ -dM -E -x c++ /dev/null | fgrep __cplusplus g++ -dM -E -x c++ /dev/null | fgrep __cplusplus ,並得到以下響應:

#define __cplusplus 201402L

所以,我的問題是,g++ 和 g++ -std=c++14 之間有什么區別,默認情況下,遵守 L2? 另外,對我來說,專門選擇其中任何一個是否足夠重要?

GCC 默認不使用-std=c++14編譯。 GCC 手冊頁(對於版本 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 之間有什么區別? .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM