【问题标题】:Is IL instruction "cpobj" applicable for reference types?IL 指令“cpobj”是否适用于引用类型?
【发布时间】:2022-03-02 21:32:05
【问题描述】:

Microsoft Docs 说:

如果……,或者 classTok 不代表值类型,则未指定 cpobj 的行为。

但是ECMA 335 说:

如果 typeTok 是引用类型,则 cpobj 指令与 ldind.ref 后跟 stind.ref 的效果相同。

哪个是对的?

  • 确保您拥有最新版本的 ecma-335(当前为第 6 版),它还记录了未指定的行为条款。
  • @HansPassant 链接的一个 OP 是 from here。你在哪里找到一个更新的?
  • @HansPassant 请点击链接。这是第 6 次,刚刚从 ECMA 网站上的大“下载”中下载。

标签: c# clr cil


【解决方案1】:

如果我们查看之前的 ECMA-335 版本,我们会发现第 3 版更改了措辞以指定:

如果 typeTok 是引用类型,则 cpobj 指令与 ldind.ref 后跟 stind.ref 的效果相同。

在第 1 版和第 2 版中,措辞与 MSDN 上的相匹配。

因此,我认为可以断定 ECMA-335 第 6 版是正确的,而 MSDN 已过时。

【讨论】:

  • 20年了,哈哈。
  • 那么这取决于“未指定”应该解释为什么。有人可能会争辩说,MSDN 未指定它,只是让 ECMA 稍后指定它。两者在某种程度上都是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 2021-06-21
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多