大小(*this)在类定义中

sizeof(*this) in class definition

本文关键字:定义 this 大小      更新时间:2023-10-16

我们可以做这样的事情吗:

#include <iostream>
class Foo
{
public:
   Foo() { std::cout << sizeof(*this) << 'n'; }
};

在 C 标准中,我看到以下内容:

ISO/IEC 9899:2011

6.7.2.1 结构和联合说明符

8 ...该类型不完整,直到紧跟在 } 之后 终止列表,并在此后完成。

但是在C++标准中,我找不到任何类似物。

sizeof 运算符不能应用于类型不完整的表达式,那么我们可以写这样的代码吗?

是的,您可以编写这样的代码,因为编译器必须将其视为类定义在类方法实现中是完整的。

例如,它必须将其视为您编写的内容:

#include <iostream>
class Foo
{
public:
   Foo();
};
// Methods declared in the body of a class are implicitly inline
// Inline, however, probably doesn't mean what you think it means:
inline Foo::Foo() { std::cout << sizeof(*this) << 'n'; }

在成员函数体中,该类是完整的 - 否则,您无法访问任何其他成员函数,也无法访问任何成员变量,这将使成员变得毫无价值。

是的,你可以写,结果也会是正确的。

#include<iostream>
using namespace std;
class Foo
{
public:
       int x;
   Foo() { std::cout << sizeof(*this) << 'n'; }
};
int main(){
    Foo b;
    b.x=5;
    system("pause");
    return 0;
    }