Скажем, я использую 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, учитывая, что даже в stdlib.h есть функция abs
, которая возвращает только int
.
На самом деле второй ответ на этот вопрос говорит о том, что использования using namespace std;
может быть недостаточно. Это правда? Мой MWE, кажется, противоречит этому.
Я работаю в Linux и использую gcc-4.8, что, возможно, является наиболее проблематичной комбинацией для разрешения зависимостей.