コンパイラが使用しているC++標準のバージョンを確認する方法(__cplusplusマクロ)
C++でプログラムを開発していると、現在コンパイラがどのC++標準に準拠してコンパイルを行っているのかを確認したい場面があります。そんなときに役立つのが、__cplusplusという定義済みマクロです。このマクロは、コンパイラが採用しているC++標準のバージョンに応じて、あらかじめ決められた値を返します。
標準ごとの__cplusplusの値
| 標準規格 | __cplusplus の値 |
|---|---|
| C++98以前 | 1 |
| C++98 | 199711L |
| C++98 + TR1 | 判別不可(C++98として扱われる) |
| C++11 | 201103L |
| C++14 | 201402L |
| C++17 | 201703L |
サンプルコード
以下のコードでは、__cplusplusの値を条件分岐で判定し、使用されているC++標準のバージョンを出力しています。
#include<iostream>
int main() {
if (__cplusplus == 201703L)
std::cout << "C++17" << std::endl;
else if (__cplusplus == 201402L)
std::cout << "C++14" << std::endl;
else if (__cplusplus == 201103L)
std::cout << "C++11" << std::endl;
else if (__cplusplus == 199711L)
std::cout << "C++98" << std::endl;
else
std::cout << "pre-standard C++" << std::endl;
}実行結果
C++98
補足:MSVCにおける注意点
Visual Studio(MSVC)のコンパイラは、歴史的な理由から/Zc:__cplusplusオプションを指定しない限り、__cplusplusの値として常に199711Lを返す仕様になっています。そのため、MSVCで正確なバージョンを取得したい場合は、このオプションを有効にするか、代わりに_MSVC_LANGマクロを使用するとよいでしょう。
-
OpenCVとC++を使った色追跡の実装方法:HSV変換から軌跡の描画まで
色追跡(カラートラッキング)は、色検出とよく似た画像処理です。追跡を実現するには、検出したオブジェクトの面積を計算し、その領域の現在位置を求める処理を数行追加します。最後に、OpenCVのline()関数を使って、オブジェクトが移動した軌跡を線として描画します。 この記事では、トラックバーでHSVのしきい値をリアルタイムに調整しながら、Webカメラの映像から特定色のオブジェクトを検出し、その動きを追跡する方法を解説します。 色追跡の基本的な流れ 映像の取得:VideoCaptureクラスでWebカメラからフレームを取得します。 HSVへの変換:cvtColor()関数でBGR画像をHSV形
-
C++とOpenCVで動画のFPS値を取得する方法をわかりやすく解説
OpenCVで動画のFPS(Frames Per Second:1秒あたりのフレーム数)を取得するには、VideoCaptureクラスが提供するget()メソッドを使用します。引数にはCAP_PROP_FPSを指定します。このプロパティは、対象動画のFPS値を返します。プログラムの冒頭では、FPS値を格納するための整数型変数「FPS」を宣言しています。その後、FPS = cap.get(CAP_PROP_FPS);という処理によって、取得したFPS値を変数に保存します。以下のサンプルプログラムは、指定した動画ファイルのFPSを取得し、コンソールウィンドウに表示するものです。サンプルコード#in