一尘不染

为什么某些类型没有文字修饰符

c#

例如,为什么long int具有文字修饰符,而short
int没有?我指的是此网站上的以下问题:C#编译器编号文字

通常,C#似乎是一种设计良好且一致的语言。可能有很强的理由为某些类型而不是为所有类型提供文字修饰符。它是什么?


阅读 324

收藏
2020-05-19

共1个答案

一尘不染

为什么long int具有文字修饰符,而short int没有?

问题是“为什么C#没有此功能?” 这个问题的答案总是相同的。默认情况下未实现功能;C#没有该功能,因为没有人设计,实现和交付该功能给客户。

缺少功能不需要理由。相反,所有功能都必须通过证明其优势大于成本来证明其合理性。作为提出该功能的人,您有责任描述为什么您认为该功能很有价值;我没有责任解释为什么不是。

可能有很强的理由为某些类型而不是为所有类型提供文字修饰符。它是什么?

现在,这是一个更容易回答的问题。现在的问题是:“什么能证明字面后缀很长,为什么还不证明类似字面后缀很短?”

整数可以用于多种用途。您可以将它们用作 算术数 。您可以将它们用作 位标志的集合
。您可以将它们用作数组的索引。还有许多其他特殊用途。但是我认为可以说大部分时间都是将整数用作算术数。

正常程序以整数形式执行的绝大多数计算所涉及的数字远远小于32位带符号整数的范围-大约+/-
20亿。当仅处理32位整数时,许多现代硬件都非常高效。因此,使数字的默认表示形式成为有符号的32位整数是有意义的。因此,C#设计为使包含32位有符号整数的计算看起来非常正常;当您说“
x = x + 1”时,将“ 1”理解为一个带符号的32位整数,并且x也是如此,并且求和结果也很好。

如果计算是整数但不适合32位整数的范围怎么办?“长”
64位整数是明智的下一步。它们在许多硬件上也很有效,并且long的范围应能满足几乎所有不进行涉及大量数量的重型组合的人的需求。因此,有意义的是,有一种方法可以在源代码中清楚简洁地指定将此处的此文字视为长整数。

互操作方案,或将整数用作位字段的方案,通常需要使用无符号整数。同样,有意义的是有一种方法可以清楚简洁地指定此文字应被视为无符号整数。

因此,总而言之,当您看到“
1”时,大多数情况下用户希望将其用作32位有符号整数的可能性就很大。下一个最可能的情况是用户希望它是一个长整数或无符号int或无符号long。因此,对于每种情况都有简洁的后缀。

因此,该特征是合理的。

为什么这不是短裤的正当理由?

因为首先, 在所有允许使用short的上下文中,使用整数立即数已经合法。 “短x = 1;” 完全合法;编译器意识到整数适合短整数,您可以使用它。

其次, 在C#中简而言之算术永远不会完成 。算术可以以整数,整数,多义和多义数来完成,但算术 永远不会
以短裤完成。短裤提升为int,并且算术以int完成,因为就像我之前说过的那样, 绝大多数算术计算都适合int 。绝大多数 都不
适合做空。在针对int优化的现代硬件上,短算法可能会 变慢 ,并且短算法不会占用任何空间。这将以整型或多头型完成。

您想要一个“长”后缀来告诉编译器“该算法需要长整数完成”,但是一个“短”后缀不告诉编译器“该算法需要短整数完成”,因为这根本不是它的功能。最初的C#语言。

提供长后缀和无符号语法的原因不适用于短裤。如果您认为此功能有明显的好处,请说明其好处。如果没有任何好处可以证明其成本合理,则该功能将无法在C#中实现。

2020-05-19