【发布时间】:2012-01-15 17:13:56
【问题描述】:
对于 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 函数的声明,我不想在我的全局命名空间中拥有它。
【问题讨论】:
-
有一个响应链接到 MSVC 中可用的内在函数:stackoverflow.com/questions/355967/…
-
你是问微软的编译器是否支持
constexpr?答案是否定的,不适用于 Visual Studio 2010 或下一版本 VS 11。 -
IIRC 你甚至不需要这样做 - 我相信有一个编译器开关可以确定是否使用内置函数而不是库函数?
标签: c++ visual-c++ c++11 intrinsics built-in