Z Mingw 4.7.2, mam bibliotekę, która nie kompiluje się z powodu połączenia z isnan
. Kompilator mówi "wszystko będzie dobrze", jeśli użyję std::isnan
i rzeczywiście uda mi się skompilować mój plik.Czy isnan w std :: namespace? Bardziej ogólnie, kiedy jest std :: konieczny, opcjonalny lub którego należy unikać?
Ale jeśli mogę sprawdzić here (EDIT: ale może powinienem był sprawdzany także here :-)), przy czym std::
nie wydaje się konieczne. Jeśli go dodam, czy plik będzie przenośny?
Ogólnie rzecz biorąc, czy w przypadku każdego przypadku istnieje ogólny sposób zrozumienia, kiedy konieczne jest wprowadzenie numeru std::
(w celu przeniesienia), opcjonalnego lub którego należy unikać?
Edit
Rzeczywiście wśród genezy problemu jest to, że istnieje wiele wtrąceń nagłówka, a niektóre z zawartych nagłówków obejmują <cmath>
, a ten plik cpp próbuje zawierać <math.h>
(gdy <cmath>
został już uwzględniony).
Nie zaznaczaj tutaj, sprawdź [tutaj] (http://en.cppreference.com/w/cpp/numeric/math/isnan). –
@ChristianRau Więc w zasadzie w C++ 98 to nie istniało, i można mieć to tylko poprzez pożyczenie go od C! To interesujące! – Antonio
Nie, zawsze tak było. Ten link powinien tylko pokazać ci, że przed nazwą funkcji znajduje się duże 'std ::'. Przez przypadek ta konkretna funkcja 'isnan' jest obsługiwana tylko w C++ 11 i nie istniała w ogóle w C++ 98 (nawet w nagłówku C, który był nagłówkiem C89/90, a nie nagłówkiem C99, który C++ 11 zastosowań). Więc w pewnym sensie możesz wypożyczyć go z C, ale nie z C zawartego w C++, ale z rzeczywistego C99 (chociaż to powinno być dziwne połączenie). –