【问题标题】:Why might a struct store its own size?为什么结构可以存储自己的大小?
【发布时间】:2013-04-30 02:30:07
【问题描述】:

我第一次看到 Windows API 时遇到了WNDCLASSX,我不禁想知道为什么它的成员 cbSize 存在。根据 MSDN,cbSize 的描述是:此结构的大小(以字节为单位)。将此成员设置为 sizeof(WNDCLASSEX)。请务必在调用 GetClassInfoEx 函数之前设置此成员。 这描述了它,并暗示了它的用途,但我不理解必要性。

我的问题是:为什么结构需要存储自己的大小?处理该结构的任何函数都不能使用sizeof 访问该信息吗?

【问题讨论】:

  • 我的猜测:说服。还有效率,运行一次 sizeof(something) 并存储它,然后一遍又一遍地使用它比一遍又一遍地运行 sizeof 效率更高。
  • do_something_with((struct foo*)i_am_a_bar_ptr);
  • 版本辅助和机器平台是两个常见的原因。
  • @TheFloatingBrain 不会在编译时解析 sizeof( )(因此需要零处理时间)?
  • “没有任何处理结构的函数可以使用 sizeof 访问该信息吗?” - 如果它只是由指向某个 基类的指针给出,则不会" 结构体。

标签: c++ winapi sizeof


【解决方案1】:

更高版本的 Windows API 可能会向结构添加新字段。如果结构有大小,那么旧代码可以调用 API 函数,该函数只会复制旧代码知道的字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多