gpt4 book ai didi

delphi - IfThen(Assigned(Widget), Widget.Description, 'No Widget' ) 不会崩溃。应该是?

转载 作者:行者123 更新时间:2023-12-03 15:04:00 30 4
gpt4 key购买 nike

在我帮助维护的代码中,我发现了多个如下所示的代码示例:

Description := IfThen(Assigned(Widget), Widget.Description, 'No Widget');

我预计当 Widget 为零时它会崩溃,但是当我测试它时,它工作得很好。

如果我在项目 - 选项 - 编译器中关闭“代码内联控制”的情况下重新编译它,我确实会遇到访问冲突。

看来,因为 IfThen 被标记为内联,所以如果 Widget 为 nil,编译器通常不会评估 Widget.Description。

是否有任何理由应该“修复”代码,因为它似乎没有被破坏?他们不希望代码发生不必要的更改。它可能会咬他们吗?

我已经用Delphi XE2和XE6对其进行了测试。

最佳答案

就我个人而言,我讨厌依赖非契约(Contract)行为。

The inline directive is a suggestion to the compiler.

如果我正确理解了我所读到的内容,那么如果您使用运行时包进行构建,您的代码也会崩溃。

inlining never occurs across package boundaries

就像 Uli Gerhardt 评论的那样,它首先可以被认为是一个错误。由于该行为不是契约性的,因此可以随时更改。

如果我要提出任何建议,我会将其标记为低优先级“修复”。我很确定有些人会争辩说,如果代码有效,则不需要修复,也不存在错误。到那时,它就变成了一个哲学问题( If a tree falls in a forest and no one is around to hear it, does it make a sound? )

关于delphi - IfThen(Assigned(Widget), Widget.Description, 'No Widget' ) 不会崩溃。应该是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46220994/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com