Czy wartość this
wskaźnika jest gwarantowana jako stała przez cały czas życia określonego obiektu? Nie mogę sobie wyobrazić przypadku, w którym to się zmieni, ale nie wiem, czy czegoś mi nie brakuje.
c++
this
language-lawyer
object-lifetime
Daniel Langr
źródło
źródło
this
wskaźnika zawsze jest wartością adresu obiektu, na który funkcja została wywołana. Pytanie jest więc równoważne z „czy obiekt może zmienić swój adres pamięci w czasie życia?”std::move
, zmieniathis
wskaźniki. Formalnie powiedzielibyśmy, że są to dwa różne przedmioty, ale nieoficjalnie można myśleć o nich jako o „tym samym”, co może powodować zamieszanie, jeśli nie zwraca się uwagi.Odpowiedzi:
tak .
Jak ujmuje to użytkownik Aconcagua : wartość
this
wskaźnika zawsze jest wartością adresu obiektu, na którym wywołano funkcję 1 . Pytanie jest więc równoważne z:Nie jest to możliwe z definicji
lifetime
2 . Żywotność obiektu zaczyna się, kiedy lub po jego zapisaniu, i kończy się przed jego zwolnieniem.1)
[class.this]/1
2)
[basic.life]/1
(moje podkreślenie)źródło
this
każdym razem zapewniać tę samą wartość , niezależnie od ruchów na stosie?Obiekt ma region przechowywania.
this
wskazuje tam.źródło
Wartość
this
gwarantowana jest stała, jeśli program kiedykolwiek ją odczyta, jeśli później niektóre bity wartości odczytu nie są możliwe do wyrzucenia elementów bezużytecznych lub jeśli następnie niektóre bity wartości odczytu uciekły poza program. We wszystkich innych przypadkach zachowuje się jak kot Schrödingera, to znaczy jest stały i zmienny jednocześnie.źródło
this