同一对象的“sizeof”的不同答案

Far*_*ian -2 c++ oop class sizeof

为什么sizeof在这段代码中为同一个对象返回两个不同的答案?

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

上面代码的输出是 1 | 8

Vla*_*cow 8

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;
}
Run Code Online (Sandbox Code Playgroud)

程序输出是

1 | 1
Run Code Online (Sandbox Code Playgroud)