mar*_*zzz 1 c++ optimization function
不确定这两种方式哪个更好(更快):
// first
#define BOUNDED(x,lo,hi) ((x) < (lo) ? (lo) : (x) > (hi) ? (hi) : (x))
// second
double Bounded(double x, double lo, double hi) {
return fmax(fmin(x, hi), lo);
};
Run Code Online (Sandbox Code Playgroud)
在两者中我都会用它们double.它取决于编译器吗?
Bat*_*eba 10
C++中的经验法则是尽可能避免使用宏.
例如,如果我传递类似的东西,你的宏将遭受重复的参数评估BOUNDED(x++, low++, hi++).
如果你想保留宏的通用性,那么为什么不写
template<typename Y>
inline Y Bounded(Y x, Y lo, Y hi)
{
return x < lo ? lo : x > hi ? hi : x;
}
Run Code Online (Sandbox Code Playgroud)
我看不出这比宏观方法慢.请注意,编译器可能会inline在其认为合适时忽略.描述性能以确定.const Y& x对于大型类型,您可以考虑传递等等,但对于= case ,这可能会变慢.Ydouble
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |