Что такое *this?

127
18 августа 2019, 04:00
Vector3 operator = (const Vector3 &v1)
{
    if (&v1 == this)
        return *this;
    return Vector3(this->x = v1.x, this->y = v1.y, this->z = v1.z);
}

Возвращаю *this. А что такое *this. Что в нем хранится? В данном случае в нем хранятся элементы x, y, z или что? Можно пожалуйста какое нибудь объяснение на пальцах.

Answer 1

В *this находится ссылка на текущий экземпляр класса.

В вашем случае *this имеет тип Vector3& , если косвенно судить по приведённому коду, то скорее всего в нём содержатся переменные x, y, z, как вы и написали.

PS. У вас не совсем корректная реализация оператора присваивания, корректнее будет так:

Vector3& operator = (const Vector3 &v1)
{
    if (&v1 != this)
    {
        x = v1.x;
        y = v1.y;
        z = v1.z;
    }
    return *this;
}
Answer 2

this - указатель на объект, в данном случае на объект типа Vector3.

*this - объект.

    class Vector3
    {};
    ...
    Vector3 vector3;
    //this - указатель на vector3 в пределах объекта vector3
// для каждого объекта будет this

P.S нужно возвращать ссылку на Vector3:

Vector3 &operator = (const Vector3 &v1)

operator overloading

‘this’ pointer in C++

READ ALSO
Вывод в поток данных при выполнении условий (использование тернарной операции)

Вывод в поток данных при выполнении условий (использование тернарной операции)

Подскажите можно ли как-то записать в 1 строчку следующий код:

115
Как работает union? [дубликат]

Как работает union? [дубликат]

На данный вопрос уже ответили:

133
Зачем нужен флаг /EHsc для MSVC компилятора?

Зачем нужен флаг /EHsc для MSVC компилятора?

Зачем нужен флаг /EHsc для MSVC компилятора? Недавно увидел его в конфиге, почитал доки, но так и не понял о каких синхронных/асинхронных исключениях...

106