質問

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関数の宣言が必要です。これは、グローバルネームスペースにないことを望んでいます。

役に立ちましたか?

解決

本質的な関数はポータブルではないので、手動でする必要があります 対応するビルトイン関数を調べます リストに追加して使用します #ifdef モードを切り替える。

あなたは持っている必要はありません abs グローバルネームスペースで、ちなみに: <cstdlib> それ以外の <stdlib.h>あなたは得るでしょう std::abs 代わりは。

コンパイラーは自分の内因性が何であるかを知っています、MSVCは使用します /oiスイッチ それらを有効にするため。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top