Twitterに投稿 はてなブックマークに追加 Google Bookmarksに追加

目次 >> C、C++ >> Tips

int型のabs関数の場所は?

数学的演算を行う関数は通常cmathヘッダをインクロードすればよい。例外はint型abs関数である。この関数はcstdlibの中で定義されている。そのため、以下のようなコードはエラーを返す。

#include <cmath>
using namespace std;
int main(void)
{
    int a=10;
    return(abs(a));
}

iccでは、

$ icpc cmath.cpp 
cmath.cpp(6): error: more than one instance of overloaded function "abs" matches the argument list:
            function "std::abs(long double)"
            function "std::abs(float)"
            function "std::abs(double)"
            argument types are: (int)
      return(abs(a));
             ^

gccでは、

$ g++ cmath.cpp 
cmath.cpp: In function 'int main()':
cmath.cpp:6: error: call of overloaded 'abs(int&)' is ambiguous
/usr/include/c++/4.4/cmath:94: note: candidates are: double std::abs(double)
/usr/include/c++/4.4/cmath:98: note:                 float std::abs(float)
/usr/include/c++/4.4/cmath:102: note:                 long double std::abs(long double)

下記のコードはエラーなしでコンパイルできる。

#include <cstdlib>
using namespace std;
int main(void)
{
    int a=10;
    return(abs(a));
}

最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて20.04、21.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2021 Chikuma Engineering Co., Ltd. All Rights Reserved.