Qual è la differenza tra questi dati e direttamente solo i dati?

-2

In C ++ sta usando

this->data

più lento di

data

    
posta Hamzsé 15.07.2016 - 21:38
fonte

3 risposte

5

Nella maggior parte dei casi, non ci sarà una differenza evidente (a meno che non si abbia il caso ovvio con i parametri del metodo nominati come le variabili membro). Ma attenzione ai modelli!

template <typename T> struct Base {
    int i;
};

template <typename T> struct Derived : public Base<T> {
    int get_i() { return i; }
};

Ciò causerà un errore di compilazione, a meno che non ci sia una variabile globale o in qualche modo accessibile denominata i . Perché? Perché potrebbe esserci una successiva specializzazione di Base<T> che non contiene una dichiarazione per i . Per correggere l'errore (dicendo al compilatore che dovrebbe ritardare la ricerca di i fino a quando Derived<T> è istanziato), dovresti usare this->i o Base<T>::i (o portarlo in ambito con una dichiarazione using) .

Per ulteriori informazioni su questo argomento, cerca "ricerca del nome in due fasi".

Fonti: documenti GCC online sulla ricerca dei nomi

    
risposta data 16.07.2016 - 00:20
fonte
1

Nessuna sorpresa. Sono funzionalmente identici.

Affinché il compilatore possa individuare il membro, il compilatore deve utilizzare il parametro this nascosto. Pertanto non vi è alcuna differenza funzionale tra l'accesso a un membro con o senza l'utilizzo di this .

Il motivo per utilizzare this è di disambiguare altri nomi che potrebbero essere inclusi nell'ambito.

    
risposta data 15.07.2016 - 23:29
fonte
0

Se una classe ha una variabile membro chiamata data e una delle sue funzioni membro (non statiche) ha anche una variabile locale (o parametro) chiamata data , quindi data è la variabile locale e this->data è la variabile membro.

class Point
{
   double x, y;
// ...
};

// Constructor with parameters named the same as the member vars
Point::Point(double x, double y)
{
   this->x = x;
   this->y = y;
}

In caso contrario, non c'è alcuna differenza: data e this->data si riferiscono alla stessa variabile membro. L'unico motivo per scrivere this-> è chiarire che intendi una variabile membro invece di una locale (e anche questo non è necessario se si adotta una convenzione come il prefisso delle variabili membro con m_ ).

    
risposta data 15.07.2016 - 23:57
fonte

Leggi altre domande sui tag