2016年9月 9日 (金)C++11からの機能、constexpr について
おはようございます、本日のブログ当番、プログラマのM.Iです。
8月も終わり、少しづつ空気に涼しさを感じるころになりました。
さて、本日はC++11の機能constexprのちょっとだけ便利な部分を紹介します。
constexprは関数やメンバ関数をコンパイル時に実行して定数に置き換えることで、
プログラム実行時に関数呼びだしをしないために最適化が望めるという機能です。
constexpr int add(int a , int b){return a + b;}// constexpr関数
constexpr int compileTimeAdd = add( 20 , 22 );// コンパイル時呼び出し
int runtimeAdd = add( 22 , 20 );// 実行時に呼び出し
つまり実行時は定数となり、それぞれ
int add(int a , int b){return a + b;}
const int compileTimeAdd = 42;
int runtimeAdd = add( 22 , 20 );
であるかのようにふるまいます。
さてこのconstexpr、VisualStudioで使用するとこの置き換えを内部で行ってくれるため、
カーソルを当てるとマクロやテンプレートを展開した後の値が見られます。
マクロがあちこちに分かれていて今の値が何なのかわからない時に便利かもしれません。
#define HOGE 20
#define FUGA 22
constexpr int HOGEFUGA = HOGE + FUGA ;// カーソルを当てると42と表示してくれる
C++11からの機能なので、使えない場合も多々あるかと思います。
実際VisualStudio 2013では add( HOGE , FUGA ); がコンパイルエラーになります。
どうやらVisualStudio 2015から正式にconstexprがサポートされるようになったようです。
使えるときには活用したいところですね。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。
コメント