加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 我应该使用无符号整数来计数成员吗?

发布时间:2020-12-15 04:28:23 所属栏目:大数据 来源:网络整理
导读:我应该对我的计数类成员使用无符号整数吗? 回答 例如,假设一个类 TList T = classprivate FCount : Cardinal;public property Count : Cardinal read FCount;end; 这有道理吗,不是吗?存储在列表中的项目数不能为负数,那么为什么不使用无符号整数类型呢?我
我应该对我的计数类成员使用无符号整数吗?

回答

例如,假设一个类

TList <T> = class
private
  FCount : Cardinal;
public
  property Count : Cardinal read FCount;
end;

这有道理吗,不是吗?存储在列表中的项目数不能为负数,那么为什么不使用无符号整数类型呢?我认为一般来说,总是使用最小的一般(最特殊的)类型可能的一个好的原则.

现在,迭代列表看起来像这样:

for I := 0 to List.Count - 1 do
  Writeln (List [I]);

当列表中存储的项目数为零时,编译器尝试评估

List.Count - 1

这会导致一个很好的整数溢出(下溢到准确的).结合调试器不显示发生异常的适当位置的事实,这对我来说很难找到.

让我补充一点,如果你已经关闭了溢出检查,所造成的错误将更加难以追踪,因为那么你将经常访问不属于你的内存,这会导致未定义的行为.

从现在开始,我将对所有的会员使用纯整数,以避免这种情况.

如果这是完整的废话,请指出我:)

(我刚刚花了一个小时跟踪整数溢出在我的代码,所以我决定分享 – 大多数人在这里当然会知道,但也许我可以节省一些时间.)

解决方法

不,绝对不是. Delphi成语是在这里使用整数.不要打语言.
在32位环境中,除了尝试构建位图之外,列表中没有更多的元素.

让我们清楚一点:每个需要使用代码的程序员都会讨厌使用Cardinal而不是一个整数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读