2013-04-13 16 views
6

Perché getline() da un colpo di testa stringa in ambito locale e può essere utilizzato:C++ getline() non richiede la dichiarazione dello spazio dei nomi

#include <iostream> 
#include <string> 

int main() { 
    std::string str; 
    getline(std::cin, str); 
    std::cout << str << "\n"; 
    return 0; 
} 

che funziona con gcc. Ma perché? È definito nell'intestazione stringa, che dovrebbe richiedere l'utilizzo di std :: getline() anziché getline().

+0

Nota a margine prima di dire che è assurdo: l'operatore << 'è definito in' std'. Dite 'std :: cout <<" hi ";' senza riferimento esplicito 'std :: operator <<'. Probabilmente è meglio. – chris

+0

Grazie! Leggerò su argomento-dipendente-ricerca! – Peter

risposta

8

Si sta verificando la ricerca dipendente dall'argomento (ADL e anche chiamata Koenig Lookup). Poiché uno o più argomenti è un tipo definito nello spazio dei nomi std, cerca la funzione nello spazio dei nomi std oltre a qualsiasi altra ricerca. Vi invito a Stephan T. Lavavej's video per saperne di più su di esso e sulla ricerca dei nomi in generale.

Problemi correlati