What is it, naokirin?

C++0xの機能 (一般化された定数式)

なんとなく勉強してみたのでC++0x(まだ正式規格としては出ていませんが)で追加される機能について書いてみたいと思います。

今日は"Generalized constant expressions"(一般化された定数式)について。

一回目だからここは気前よく「RValue reference」とか書ければよかったんですが、私の理解が完ぺきとは言い難いのでこの辺からスタートしようと思いました。
こういう記事って、何番煎じくらいなんでしょうね。


さて、Generalized constant expressionsについてですが、いわゆる配列の要素数を決定するときに関数で指定することは許されなかった問題を解決します。もちろんこれは局所的な見方であって、大きな面ではコンパイル時に定数として式(関数)を解決するということを意味します。

どうするかといえば、constexprキーワードを使います。

例.

/* constexprキーワード */
constexpr int con(int x){ return x+1; }

/* 要素を2つ持つ配列 */
int a[con(1)]; 


今まででは、コンパイル時に関数を定数として扱うことができなかったため、上のような処理はコンパイルエラーとなっていました。C++0xで追加される予定のこの機能を使うと、コンパイル時に関数を定数として扱うことができるため、上のような処理が可能となります。


この機能は数値計算の時とかは役に立ちそうだなぁと個人的に思ったり。
配列を使うと定数となるような式でしか配列の要素数を指定できなかったので、その都度必要な要素数の大きさが非線形的に変わるような場合には仕方なくstd::vectorなどを用いていましたが、関数で指定できるので配列で行うことができるようになり、楽かなと思います。