Является ли «this» cpp эквивалентом «self» в python? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть опыт Python, и сейчас я учусь cpp, чтобы ускорить код. После прочтения бит this кажется cpp эквивалентом self. Я нашел вопрос , объясняющий разницу с точки зрения пользователя cpp, но я бы хотел узнать о любых различиях с точки зрения пользователя python.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Основным отличием является то, что вам в большинстве случаев не требуется this в C ++, потому что существует синтаксическое c различие между определением члена и ссылкой на него.

Контраст

Python:

class Foo:
    def __init__(self):
        self._bar = 42

    def baz(self):
        return self._bar += 1

C ++:

class Foo {
    int bar = 42;
public:
    int baz() { return bar += 1; }
}
1 голос
/ 16 апреля 2020

В дополнение к уже полученному ответу self в Python - это просто условное имя, выбранное для первого аргумента метода класса, который ссылается на сам объект, к которому метод вызывается напрямую.

В C ++ this - это ключевое слово, которое не указано явно в качестве параметра функции-члена класса non-stati c, но автоматически ссылается на случай, когда такая функция вызывается как pointer .

Это означает, что this это не ссылка на объект, а указатель на него. Так что

this.member = 4;

невозможно. this необходимо сначала разыменовать, чтобы получить ссылку на объект из указателя:

this->member = 4;

или (необычно)

(*this).member = 4;

За некоторыми исключениями, касающимися поиска имени в шаблонах имена членов ссылаются на текущего члена экземпляра автоматически, как объяснено в другом ответе, поэтому this-> можно отбросить, обычно:

member = 4;
...