![]() |
1
60
线程安全性和原子性。 首先,考虑这一行代码:
任何阅读该声明的人都可以合理地假设
现在考虑两种可能的代码翻译方法:
在第一种情况下
在第二种情况下,
|
![]() |
2
32
卢克的回答既正确又优秀,对你很好。然而,它并不完整。我们这样做还有更多的理由。 规范非常清楚这是正确的codegen;规范说对象初始值设定项创建了一个临时的、不可见的本地变量,它存储表达式的结果。但我们为什么要这样说明呢?那就是为什么
方法
更直接的是
好吧,作为一个纯粹的实际问题,根据表达式的内容而不是上下文来指定表达式的行为总是比较容易的。但是,对于这个特定的情况,假设我们指定这是分配给本地或字段的所需代码生成器。在这种情况下,foo会 明确分配 在()之后,因此可以在初始值设定项中使用。你真的想要吗
合法吗?我希望不会。在初始化完成之前,不会明确分配foo。 或者,考虑属性。
这必须是
而不是
因为我们不希望frob()被调用两次,也不希望属性myfoo被访问两次,所以我们希望每个属性都被访问一次。 现在,在您的特定情况下,我们可以编写一个优化过程,检测额外的局部是不必要的,并将其优化掉。但我们还有其他的优先事项,而这种抖动可能会很好地优化本地环境。 问得好。我想写这篇博客已经有一段时间了。 |
![]() |
3
2
为什么:可以这样做是为了确保(从语言的角度)不存在对未初始化对象的“已知”引用吗?类似于对象初始值设定项的(伪)构造函数语义?但这只是个主意……除了在多线程环境中,我无法想象使用引用和访问未初始化对象的方法。 编辑:太慢.. |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 3 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 3 年前 |