« 海外出張♪ | トップページ | 焦りは禁物 »

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がサポートされるようになったようです。

使えるときには活用したいところですね。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2016/09/c11constexpr-06.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« 海外出張♪ | トップページ | 焦りは禁物 »

プログラマー」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: C++11からの機能、constexpr について:

« 海外出張♪ | トップページ | 焦りは禁物 »