首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果被分配(MyObj )那么还是如果(MyObj <> 0)那么做更好?

如果被分配(MyObj )那么还是如果(MyObj <> 0)那么做更好?
EN

Stack Overflow用户
提问于 2018-05-22 07:42:27
回答 1查看 237关注 0票数 0

当我读到在最初的delphi源代码中所做的修改时(主要是在火猴中),我看到embarcadero有时会用if (MyObj <> nil) then代替if (MyObj <> nil) then。他们是否有任何真正的理由这么做,还是这只是单纯的化妆品?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-22 07:55:31

对于指针、对象引用、动态数组、接口,没有区别。这两种你都可以。

对于方法指针,这是有区别的。IDE表单设计器对已发布的方法指针属性执行一些欺骗操作,例如事件。当这些是nil时,index将索引存储在其中一个指针的低两个字节中。如果要对nil进行测试,您会发现该值不是nil,这是不需要的。

所以您使用Assigned,它忽略低的两个字节。这在Windows上是可能的,因为低于65536的内存地址是保留的,并且不能是有效的指针。这对于在IDE表单设计器(即设计时包)中运行的代码至关重要。在这些情况下,组件编写器必须使用Assigned

请注意,这只适用于Win32编译器。因为这是IDE运行的唯一平台,这是Assigned具有这种特殊行为的唯一平台。

Allen在这里讨论这个问题:分配还是不分配,这就是问题.

还有一点要指出:

  • 使用Assigned从来都不是错误的。
  • 如果主题是支持已发布属性的方法指针,并且您的代码在设计时运行,则与nil进行比较是错误的。

就我个人而言,我总是使用Assigned,因为这使代码具有一致性。此外,这意味着您甚至不必考虑测试的主题是单个指针类型还是双指针类型,或者您的代码是否在设计器中运行。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50462316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档