c# - 当我们使用整型文字初始化字节时是否存在隐式类型转换?
问题描述
我是 C# 的新手。
首先,请问是否int
是C#中整数的默认类型?换句话说,整数的文字在 C# 中是否被视为 int?
如果是这样,因为我们总是可以如下声明一个字节:
byte b = 1;
请问在这个初始化过程中是否发生了隐式类型转换(我的猜测:文字1
首先被视为int
然后被转换为byte
)?
如果我上面的猜测是正确的,我可以问为什么我们可以像上面那样隐式转换int
为byte
使用文字,而当文字被类型变量替换时我们不能这样做int
(例如如下)?
int a = 1;
byte c = a; // error
此外,我发现对于常量:
const int d = 1;
byte f = d; // no error
const long g = 1;
int i = g; // error
byte h = g; //error
任何人都可以对这些进行更多解释吗?
我问这个是因为它给我一种不一致的感觉。
非常感谢
解决方案
整数的文字在 C# 中被视为 int 吗?
不必要。整数文字可以有类型int
, uint
, long
and ulong
,这取决于它有什么后缀(U
和/或L
)。
还:
如果字面量没有后缀,则它具有可以表示其值的第一个类型:
int
,uint
,long
,ulong
。
因此,如果值可以适合int
,它将具有 类型int
。如果它不能适合 anint
但可以 a uint
,那么它将具有 type uint
,依此类推。
请问在这个初始化过程中是否发生了隐式类型转换?
我可以问为什么我们可以使用上面的文字将 int 隐式转换为字节,而当文字被 int 类型的变量替换时我们不能这样做?
在这两行中,
byte b = 1;
byte f = d;
执行相同的转换 -隐式常量表达式转换。
A
constant_expression
of typeint
可以转换为 typesbyte
,byte
,short
,ushort
,uint
, orulong
,前提是 的值constant_expression
在目标类型的范围内。
字面量1
和d
都是type的常量表达式int
。
a
不起作用,因为它是一个变量,显然不是一个常量,所以不是一个常量表达式。
g
不起作用,因为它是 type 的常量表达式long
,并且隐式常量表达式转换仅适用于int
s.
推荐阅读
- rust - 序列化 Diesel 类型时如何加入另一个表?
- git - 警告和错误的日志不会写入 Powershell 中的日志文件
- java - 在 Eclipse 中未检测到 Java MySQL 连接器
- javascript - 如何在 Node.js 中返回一个函数
- excel-formula - Excel 公式在 2019 年之后从我们的 URL 中删除所有内容
- javascript - 反应一次只显示n个产品保持其余的空闲并在滚动到页面底部时显示另一个n个
- arrays - 根据行将 2D numpy 数组拆分为块
- r - 找到存在的字符串并更新频率
- amazon-web-services - 如何将 srt 文件转换为 AWS Polly 的 SSML 增强文本?
- javascript - 如何在 recaptcha 回调中访问更新的道具