小さな問題を解決するためにいくつかのテンプレートメタプログラミングを使用していますが、構文は少し面倒です-したがって、以下の例では、空のコンストラクターを持つメタクラスの演算子をオーバーロードすると、(実行時)パフォーマンスのペナルティ?すべての一時的なものは実際に構築されますか、それともそれらが最適化されると想定できますか?
template<int value_>
struct Int {
static const int value = value_;
template<typename B>
struct Add : public Int<value + B::value> { };
template<typename B>
Int<value + B::value> operator+(B const&) { return Int<value + B::value>(); }
};
int main()
{
// Is doing this:
int sum = Int<1>::Add<Int<2> >().value;
// any more efficient (at runtime) than this:
int sum = (Int<1>() + Int<2>()).value;
return sum;
}