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