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

Different answers for `sizeof` for same object

本文关键字:quot 答案 对象 sizeof      更新时间:2023-10-16

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

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

上面代码的输出是1 | 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;
}

程序输出为

1 | 1