![]() |
1
34
不,局部变量没有默认值 一 . 他们一定是 明确指定 在你读之前。这减少了你使用变量的机会 认为 你已经给了一个合理的值,实际上它有一些默认值。对于实例或静态变量,这无法完成,因为您不知道将以何种顺序调用方法。 具体分配详见C 3.0规范第5.3节。 注意,这与它是引用类型变量无关。这将无法以相同的方式编译:
一
就语言而言,无论如何…显然内存中的存储位置
某物
但这与实现无关。有
一
通过创建一个具有
我怀疑cli规范 做 强制使用具有默认值的局部变量-但我必须检查。除非你在做上述的坏事,否则这对你来说应该无关紧要。 |
![]() |
2
8
字段(类/结构上的变量)初始化为
对于信息,这里有一些crafy代码,显示了一个正式的未初始化变量的值:
IL 只是 做“ret”-它从不分配任何东西。 |
![]() |
3
2
局部变量没有分配默认值。在使用它们之前,必须对它们进行初始化。您可以明确地初始化为
|
![]() |
4
1
局部变量没有分配默认值,甚至没有
|
![]() |
5
1
不,局部变量不会自动设置为0(默认值)。 但因为你(总是)犯了那个错误,这真的没关系。如果它有另一个值,编译器永远不会让你发现。 不要与字段变量(类成员)混淆,它们 是 初始化为其类型的默认值(0/null/false/…)。 |
![]() |
6
1
价值
(但是,局部变量可能被优化为使用寄存器而不是堆栈空间,但它仍然是未定义的。) 编译器不允许您使用未定义的值,它必须能够在使用变量之前确定该变量已初始化。 作为比较,vb会初始化局部变量。虽然有时这是可行的,但也可能意味着您在给变量赋予有意义的值之前无意中使用了它,编译器无法确定这是否是您无意中要做的事情。 |
![]() |
7
0
这无关紧要,因为任何实现c的编译器都不应该编译这类代码。 如果有默认值,那么它是可编译的。但是没有局部变量。 |
![]() |
8
0
除了“正确性”之外,局部变量初始化还与CLR的
验证过程
.
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |