C++ には国際規格のバージョンがいくつかあります。
おおよそ規格の出版年に応じて命名されており、次のようなものがあります。
- C++98
- C++03
- C++11
- C++14
- C++17
- C++20
C++11 で大きな改定が行われており、これ以降のバージョンはモダン C++ と呼ばれたりします。
C++ バージョンによって、利用できる機能に差異があることから、コンパイラの対応バージョンを把握することは重要です。
以下、各種コンパイラにおける C++ バージョンの確認方法を掲載します。
Other Languages
目次
C++ バージョン確認のためのサンプルコード
早速ですがサンプルコードです。
コンパイラにて定義されているマクロの __cplusplus
を出力することで確認することができます。
#include <iostream>
int main()
{
std::cout << __cplusplus << std::endl;
return 0;
}
gcc での出力結果例
デフォルトオプションでの出力
gcc での出力例です。
$ g++ --version
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ main.cc && ./a.out
201703
11.4.0 のバージョンでは、201703
の文字列が出力されます。
これは C++17 であることを表します。
std オプションを指定した場合の出力
gcc では std オプションで C++ バージョンを指定することもできます。
いくつかの出力例を示します。
$ g++ -std=c++98 main.cc && ./a.out
199711
$ g++ -std=c++03 main.cc && ./a.out
199711
$ g++ -std=c++11 main.cc && ./a.out
201103
$ g++ -std=c++14 main.cc && ./a.out
201402
$ g++ -std=c++17 main.cc && ./a.out
201703
$ g++ -std=c++20 main.cc && ./a.out
202002
なお、g++ の man を確認すると、バージョンによっては “Support is experimental” の記述がありますので利用には注意が必要です。
c++20
c++2a
The 2020 ISO C++ standard plus amendments. Support is experimental, and could change in incompatible ways in future releases. The name c++2a is deprecated.
clang での出力例
clang での出力例です。
バージョン 14.0.0 の時点では、デフォルトが C++14 になっています。
$ clang++ --version
Ubuntu clang version 14.0.0-1ubuntu1.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ clang++ main.cc && ./a.out
201402
なお、ここでは省略しますが、clang でも std オプションにて C++ バージョンの指定が可能です。
Visual Studio 2022 での出力例
Visual Studio 2022 で試行したところ、199711
の文字列が出力されました。
ここでは必要とする情報は取得できなそうです。
プロジェクトのプロパティで確認・指定ができますので、こちらで確認するようにしましょう。
コメント