Различные ответы для `sizeof` для одного и того же объекта - PullRequest
0 голосов
/ 12 февраля 2020

Почему sizeof возвращает два разных ответа для одного и того же объекта в этом коде?

class Test {
    public:
        int operator!() const {
            return sizeof(this);
        }
};
int main() {
    Test obj;
    std::cout << sizeof(obj) << " | " << !obj;
}

Вывод кода выше равен 1 | 8

1 Ответ

8 голосов
/ 12 февраля 2020

this - указатель на текущий объект класса Test .. Таким образом, operator ! возвращает размер указателя, а sizeof( obj ) - размер пустого класса Test или объекта. класса, который не может быть равен нулю в C ++.

Измените оператор, как показано в приведенной ниже программе, и вы получите ожидаемый результат

#include <iostream>

class Test {
    public:
        size_t operator!() const {
            return sizeof( *this );
            //             ^^^^^   
        }
};

int main() 
{
    Test obj;
    std::cout << sizeof(obj) << " | " << !obj;
}

Выходные данные программы

1 | 1
...