同一对象对 `sizeof` 的不同答案

Different answers for `sizeof` for same object

为什么在此代码中 sizeof returns 对同一个对象有两个不同的答案?

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

上面代码的输出是1 | 8

this是指向classTest的当前对象的指针。所以operator !returns指针的大小而sizeof( obj ) 是空 class Test 或 class 的对象的大小,在 C++ 中可能不等于零。

按照下面的程序更改运算符,您将得到预期的结果

#include <iostream>

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

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

程序输出为

1 | 1