5

当我在 VS 中编写此代码时,它不起作用(“无法将'int'隐式转换为'short'。存在显式转换。您是否缺少演员表?”):

short A = 5;
short B = 1 << A;

然而这段代码绝对没问题:

short A = 1 << 5;

我知道我可以通过将整个表达式转换为简短来消除错误,但是谁能告诉我为什么会发生这种情况?

4

2 回答 2

5

因为 A 不是文字,所以编译器不知道结果可以表示为 a short。因此它需要一个明确的演员表。使用文字 5,编译器会看到结果是 32,它可以放入short.

于 2012-10-19T23:13:16.287 回答
2

C# 语言规范 4.0 在 6.1.9 中声明:

如果常量表达式的值在目标类型的范围内,则 int 类型的常量表达式(第 7.18 节)可以转换为 sbyte、byte、short、ushort、uint 或 ulong 类型。

常量表达式的转换是隐含的特殊情况之一(6.1)。

于 2012-10-19T23:18:17.767 回答