2009-10-22 15 views
6

pytanie jest proste ... Czy jest jakaś różnica w używaniu tego-> zmienna lub zmienna bezpośrednio z jakiegoś powodu?"ten" wskaźnik wewnątrz klasy

Nie mam z tym żadnego problemu, ale używam tego -> dużo i chciałbym się dowiedzieć, czy są jakieś różnice, zanim przejdę dalej.

Widziałem komentarz na temat postu tutaj i nie pamiętam, który wątek, ale osoba powiedziała coś o użyciu słowa kluczowego "to".

Osobiście uważam, że przyjemnie jest używać tej zmiennej bezpośrednio. Dzięki temu kod jest łatwiejszy i ładniejszy.

Joe

+2

zobacz: http://stackoverflow.com/questions/993352/when-should-i-make-explicit-use-of-the-this-pointer –

+0

Większość wskazówek na temat kodowania, które przeczytałem, nie zgadzam się z tym bez ważnego powodu . Jest to szum kodu, który nie nadaje żadnego znaczenia. Każdy, kto czyta twój kod, powinien móc wywnioskować z kontekstu, w którym używasz członka klasy. – dss539

+0

Użycie "tego" powoduje, że program jest czytelniejszy – Xinus

Odpowiedz

12

Nie, nie ma istotnej różnicy, to po prostu kwalifikator zakres. Załóżmy jednak, że istnieje metoda, w której ten-> foo jest członkiem prywatnym. Tutaj pozwala ci na przyjęcie parametru o tej samej nazwie co zmienna klasy/instancji.

0

To był rodzaj zapytał i odpowiedział na temat C# here i myślę, że odpowiedź (przynajmniej moje) jest taka sama. To jest preferencja.

1

Uważam, że używanie this sprawia, że ​​mój kod jest bardziej czytelny, ale nie ma powodu, że musisz. Jeśli spojrzymy na kod asemblera generowany przez kompilator, powinien on być funkcjonalnie (i zazwyczaj dosłownie) identyczny.

Zasadniczo, po wywołaniu funkcji przekazuje się ukryty argument this, który jest następnie używany do ustalenia, które zmienne są gdzie. Jeśli używasz zmiennych bezpośrednio, bez this->, nie robisz niczego poza użyciem cukru syntaktycznego.

16

W większości przypadków nie ma różnicy. Ale są sytuacje, w których to robi różnicę:

class foo 
{ 
    int i; 
    void bar() { 
     int i = 3; 
     i; // refers to local i 
     this->i; // refers to the member i 
    } 
}; 

Również z szablonami może trzeba zakwalifikować element z this-> tak że nazwa odnośnika jest opóźniony:

template<typename T> 
struct A 
{ 
    int i; 
    T* p; 
}; 

template<typename T> 
struct B : A<T> 
{ 
    void foo() { 
     int k = this->i; // here this-> is required 
    } 
}; 

kompilator, że właściwie robi "wyszukiwanie dwufazowe" będzie narzekać, jeśli usuniesz "ten->", że nie wie, co powinienem. "this->" mówi, że jest członkiem z klasy bazowej. Ponieważ klasa bazowa zależy od parametru szablonu, wyszukiwanie jest opóźniane, dopóki nie zostanie utworzony szablon klasy.

+0

+1 za sygnalizowanie problemu z szablonem. gcc zwykle mówi, że coś wzdłuż linii " nie zależy od parametru szablonu, więc definicja musi być dostępna". –

Powiązane problemy