C++11になってconstexprという機能が搭載された。
簡単に説明すると変数に対して使えばコンパイル時定数じゃないとコンパイルエラーになるconst定数に、関数に対して使えば定数式となる関数にしてくれる機能である。
リテラル型云々については中3女子氏のブログなどで参照して欲しい。今回は上の2つだけでなんとかなる内容である。
さて、もうそろそろC++14が来る(ていうかclangはC++14を完全搭載してる)がC++11時代のconstexprもパズル的で楽しい。というわけでconstexpr初心者の私がconstexpr初心者向けに問題を3つ考えることにした。
以下の3問である。
以下の処理をするconstexpr関数をそれぞれ作れ。
(1)2以上100000以下の整数nに対してn以下の素数の総和を求める関数size_t prime_sum(int n)
(2)0x1以上0x10000未満の整数Numとdouble型配列real[Num]に対してその最大値を求めるtemplate<size_t Num>double max(double(&real)[Num])
(3)各成分がdouble型である3次元ベクトル(x,y,z)と(a,b,c)についてその角度θについての余弦cosθを求めるdouble cos(double x,double y,double z,double a,double b,double c)
(3)だけ簡単過ぎる気がするけどキニシナイキニシナイ。
PR