2016-06-23 25 views
9

Ho trovato una cosa confusa sulla parola chiave "using". Se faccio uso di una classe o di una struct, allora non sarà necessario fare uso di funzioni nello stesso spazio dei nomi che prendono quella classe o struct come argomento. Come i codici qui sotto.Che cosa fa esattamente la parola chiave "using" in C++?

namespace A 
{ 
    struct testData 
    { 
     int x; 
    }; 

    int testFunc(testData data) 
    { 
     return data.x; 
    } 
} 

#include <cstdio>; 

using A::testData; 

int main() 
{ 
    testData test = { 1 }; 
    printf("%d", testFunc(test)); 

    return 0; 
} 

ho pensato che non dovrebbe essere consentito di utilizzare TestFunc(), perché io uso solo la parola "con" per Testdata. Tuttavia, questi codici funzionano bene.

Potrebbe dirmi perché funziona così?

+2

[argomento Lookup Dependent] (http://en.cppreference.com/w/cpp/language/adl). – BoBTFish

+0

@BoBTFish Vedo. Grazie mille. –

risposta

9

Si è verificato il modo in cui using funziona.

Ma stai dimenticando una cosa: ricerca dipendente dall'argomento. Il compilatore può vedere testFunc tramite il parametro test fornito.

Vedi http://en.cppreference.com/w/cpp/language/adl

+0

Oh capisco. Grazie mille. –

Problemi correlati