私がusing namespace std
(間違いなく悪い習慣を)使用していabs
て、コードで関数を使用しているとします(オーバーロードされた絶対関数を取得するため)。具体的には、私のMWEは次のとおりです。
#include <cmath>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char* argv[]) {
double f(-0.4);
std::cout<<"abs(f) = "<<abs(f)<<std::endl;
}
行をコメントアウトするとusing namespace std;
、出力は次のようになります
abs(f) = 0
それ以外の場合、出力は
abs(f) = 0.4
私が理解していないのは、後者の場合に「正しい」 abs 関数がどのように呼び出されるかということabs
ですint
。
実際、この質問に対する 2 番目の回答では、 を使用するだけでは十分でusing namespace std;
はない可能性があると述べています。これは本当ですか?私のMWEはこれと矛盾しているようです。
私は Linux を使用しており、gcc-4.8 を使用しています。これは、依存関係を解決する上でおそらく最も問題のある組み合わせです。