考虑以下代码:public unsafe struct MyStruct{ public fixed int Nums[128];}private static void DoSomething(){ MyStruct s = new MyStruct(); unsafe { int val = s.Nums[23]; Console.WriteLine(val.ToString()); //Is this guaranteed to be "0"? }}在这种情况下,是否可以保证在MyStruct创建新的时Nums,每个索引处的值都会为 0?在我自己的测试中,它似乎确实被初始化为默认值,但我问是因为它是unsafe.
1 回答

MYYA
TA贡献1868条经验 获得超4个赞
啊,好吧,这花了一些时间才找到,
但是从语言规范版本 3.0
从18.7 固定大小缓冲区开始并继续
有几个参考,最值得注意的是
固定大小的缓冲区不受明确赋值检查(第 5.3 节)的约束,并且为了对 struct 类型变量进行明确赋值检查,将忽略固定大小的缓冲区成员。当固定大小缓冲区成员的最外层包含结构变量是静态变量、类实例的实例变量或数组元素时,固定大小缓冲区的元素会自动初始化为其默认值(第 5.2 节)。在所有其他情况下,固定大小缓冲区的初始内容是未定义的。
现在,我自己还没有测试过,这些规范的语言有时很难完全理解。但是,这似乎与您的发现一致
- 1 回答
- 0 关注
- 194 浏览
添加回答
举报
0/150
提交
取消