c++ - 获取类中成员大小的奇怪语法

标签 c++

我遇到了一些如下所示的代码:

#define SIZE_M(klass, mem)     sizeof( ((klass*)0)->mem )

我不熟悉语法 (klass*)0) 及其用途。它取消引用指向成员 mem 的指针,但是这里的 0 是在 mem 不存在的情况下采用默认值的技巧吗?

最佳答案

表达式 ((klass*)0) 是一个cast。我们将表达式 0 从其通常类型转换为 klass* 类型,这意味着它将成为指向任何 klass 的指针。编写该表达式的目的是我们需要一个 klass* 类型的对象,但我们不知道如何获得一个,因为不同的类对它们的构造方式有不同的限制。所以我们有点作弊并制作这个空指针并告诉编译器它有一个 klass* 类型。然后我们可以获取该假对象中的一个成员,并使用 sizeof 询问编译器它有多大。 sizeof(...) 表达式全部在编译时求值。

关于c++ - 获取类中成员大小的奇怪语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36657289/

相关文章:

c++ - 调试 COM 引用计数器

android - JNI中无法导入 vector

c# - 将 XSD 转换为 SQL 关系表

c++ - 我可以将 std::array 转换为切片吗?或者还有什么我可以用的吗?

c++ - 无法创建类 wxWindowNR 的窗口

C++奇怪的字符串大小

c++ - 如何为 Windows 编写一个无法杀死的进程?

c++ - 这个 C++ 模板函数在做什么

c++ - 判断进程是否挂起

c++ - 将 int 转换为长指针