类定义中的sizeof(*this)

Fro*_*art 15 c++

我们可以做这样的事情:

#include <iostream>

class Foo
{
public:
   Foo() { std::cout << sizeof(*this) << '\n'; }
};
Run Code Online (Sandbox Code Playgroud)

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

ISO/IEC 9899:2011

6.7.2.1结构和联合说明符

8 ...类型不完整,直到终止列表的}之后,然后完成.

但在C++标准版中我找不到任何类比.

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

Mar*_*k B 10

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

例如,它必须像对待你一样对待它:

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


Pup*_*ppy 8

在成员函数体内部,类是完整的 - 否则,您无法访问任何其他成员函数,也无法访问任何成员变量,这将成为一个相当无价值的成员.