对于 GCC 和 Clang,我可以轻松做到这一点:
// absolute value
inline constexpr int abs(const int number)
{ return __builtin_abs(number); }
inline constexpr long abs(const long number)
{ return __builtin_labs(number); }
inline constexpr long long abs(const long long number)
{ return __builtin_llabs(number); }
inline constexpr double abs(const double& number)
{ return __builtin_fabs(number); }
inline constexpr float abs(const float& number)
{ return __builtin_fabsf(number); }
inline constexpr long double abs(const long double& number)
{ return __builtin_fabsl(number); }
这就像一个魅力。我想对几乎每个数学函数都做类似的事情,并且我的代码也可以在 MSVC 上运行。我怎样才能为 MSVC 做与上述相同的操作?
编辑:为了清楚起见:问题是关于__builtin_*
功能,没有别的。我试过
#pragma intrinsic(abs)
但这需要一个 abs 函数的声明,我不想在我的全局命名空间中拥有它。