VCのabs と 定数
abs(-4); を*1 Release ビルドしたところで、ちっとも定数になってくれなくてショック。 いやまぁ、実行時に評価されるようなコード吐かれたところで数ステップ増えるだけなので、気にするようなレベルじゃないんですが……
いやでもなんか悔しいよね。(ぉ
仕方ないので、static_abs を 構造体テンプレートを使って書いてしまった。
コードを乗せては見た物の、ぶっちゃけ皆普通に書いてるんだろうなぁ。^^;
template<int VALUE, bool b>
struct inner_static_abs
{ // VALUE < 0
enum{ value = -VALUE };
};
template<int VALUE>
struct inner_static_abs<VALUE, true>
{ // VALUE >= 0
enum{ value = VALUE };
};
template<int VALUE>
struct static_abs
{
enum { value = inner_static_abs<VALUE, VALUE >= 0>::value };
};
↑を書いてから飯食ってる時に気づいた
template<typename T>
inline T my_abs(T t)
{
return t < 0 ? -t : t;
}
こっちの方が判りやすい && 汎用性ありまくりなのかしらーーーー!!!!!!! orz
はっはっは
最初から判ってたのかしらー! "あえて" クラスtemplate*2 使ったコード書いただけなのかしらー! 絶対なのかしらーーー!!