我遇到了一些如下所示的代码:
#define SIZE_M(klass, mem) sizeof( ((klass*)0)->mem )
我不熟悉语法(klass*)0)
及其目的是什么。它取消引用了指向成员mem
的指针,但是这里的0
在默认情况下默认存在mem不存在?
答案 0 :(得分:4)
表达式((klass*)0)
是强制转换。我们将表达式0从通常的类型转换为类型klass*
,这意味着它将是指向klass
的指针。编写该表达式的目的是我们需要一个klass*
类型的对象,但我们不知道如何获得一个,因为不同的类对它们的构造方式有不同的限制。所以我们有点作弊并制作这个空指针并告诉编译器它的类型为klass*
。然后我们可以获得该伪对象中的一个成员,并询问编译器使用sizeof
的大小。 sizeof(...)
表达式全部在编译时进行评估。