Ten kod jest najprawdopodobniej równa:
TimePoint now_ = TimePoint::min();
Oznacza to, min()
jest metoda statyczna, a nazywając ją przy użyciu instancji jest taki sam jak nazywając go tak, instancja jest używana tylko do określania Typ. Nie ma w tym żadnej czarnej magii, to tylko dwie składnie do robienia tego samego.
Co do tego, dlaczego dany kod kompiluje: now_
jest już zadeklarowany po lewej stronie linii, więc gdy jest używany do inicjalizacji po prawej stronie, kompilator zna już jego typ i jest w stanie wywołać metodę statyczną. Próba wywołania metody niestatycznej powinna spowodować błąd (patrz komentarz @BenVoigt poniżej).
Jak wynika z faktu, że trzeba było napisać to pytanie, składnia pytania nie jest najbardziej jasna. Może to być kuszące, jeśli nazwa typu jest długa i może być uzasadniona w deklaracjach zmiennych członkowskich z inicjatorem (którym jest kod zapytania). W funkcjach wewnętrznych kodu lepszym sposobem na zmniejszenie liczby powtórzeń jest auto
.
myślę tę pytanie można poprawić, jeśli podasz link do dokumentacji 'TimePoint' (jeśli jest dostępny w sieci) lub dodana deklaracja' TimePoint :: min() '(skopiuj i wklej odpowiednie linie z pliku .h, które musi mieć, jeśli się kompiluje). – hyde
Zobacz także: http://stackoverflow.com/questions/325555/c-static-member-method-call-on-class-instance –
jeszcze jeden sposób zaciemniania kodu ... –