首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用uint与int

使用uint与int
EN

Stack Overflow用户
提问于 2010-06-23 02:07:08
回答 10查看 46.1K关注 0票数 90

我观察了一段时间,C#程序员倾向于在任何地方使用int,而很少求助于uint。但是我从来没有找到一个令人满意的答案。

如果互操作性是您的目标,uint不应该出现在公共API中,因为并不是所有的CLI语言都支持无符号整数。但这并不能解释为什么int如此流行,甚至在内部类中也是如此。我怀疑这就是为什么uint在BCL中使用得很少的原因。

在C++中,如果有一个负值没有意义的整数,则选择一个无符号整数。

这清楚地表明负数是不被允许或期望的,编译器将为您做一些检查。我还怀疑在数组索引的情况下,JIT可以很容易地放弃下限检查。

但是,当混合int和unit类型时,将需要额外的注意和强制转换。

应该更多地使用uint吗?为什么?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-06-23 02:11:17

我怀疑,您观察到的为什么在BCL中不使用uint是主要原因。

UInt32不兼容日志服务,这意味着它完全不适合用于公共API。如果你打算在你的私有API中使用uint,这就意味着要转换成其他类型--而且保持类型不变通常更容易也更安全。

我还怀疑这在C#开发中并不常见,即使C#是唯一使用的语言,主要是因为它在BCL中并不常见。一般来说,开发人员试图(谢天谢地)模仿他们正在构建的框架的风格--在C#的例子中,这意味着试图让你的API,无论是公共的还是内部的,看起来尽可能地像.NET框架BCL。这意味着要谨慎地使用uint。

票数 54
EN

Stack Overflow用户

发布于 2010-06-23 02:08:15

int的类型比uint短。

票数 80
EN

Stack Overflow用户

发布于 2010-06-23 02:45:01

1)坏习惯。我是认真的。即使在C/C++中也是如此。

想想常见的for模式:

代码语言:javascript
复制
for( int i=0; i<3; i++ )
    foo(i);

这里绝对没有理由使用整数。你永远不会有负值。但几乎每个人都会这样做一个简单的循环,即使它包含(至少)另外两个“样式”错误。

2) int被认为是机器的本机类型。

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

https://stackoverflow.com/questions/3095805

复制
相关文章

相似问题

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