首页 > 解决方案 > 同一对象的“sizeof”的不同答案

问题描述

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

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

上面代码的输出是1 | 8

标签: c++classoopsizeof

解决方案


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

推荐阅读