问题标签 [compiler-generated]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
8011 浏览

c# - 通过编译器生成的局部变量隐式转换为具有可为空结构的 System.Double:为什么会失败?

鉴于以下情况,为什么会抛出 InvalidCastException?我不明白为什么它应该在错误之外(这是在 x86 中;x64 崩溃并在 clrjit.dll 中出现 0xC0000005)。

这是为 生成的 CIL Main()

注意 IL 中的 0x2D - 0x3E 行。它检索MyDouble?实例,调用GetValueOrDefault它,调用它的隐式运算符,然后将结果包装在 a 中Double?并将其存储在编译器生成的CS$0$0001本地中。在 0x3F 到 0x55 行中,我们CS$0$0001通过“unwrap”检索值,GetValueOrDefault然后与 0 进行比较……请稍等!MyDouble::op_Implicit0x46 行的额外调用是什么?

如果我们调试 C# 程序,我们确实会看到 2 次调用implicit operator Double(MyDouble value),并且是第二次调用失败,因为value没有初始化。

这里发生了什么?

0 投票
4 回答
1115 浏览

c++ - 编译器生成的抽象基类的析构函数是虚拟的吗?

显然,Base会导出。那么,C++ 是否说编译器生成的析构函数Base必须是虚拟的?

谢谢!

0 投票
2 回答
24913 浏览

c# - 了解 dotPeek 反编译代码中编译器生成的类型

嘿。我正在阅读Digi Traffic Accelerator的反编译源(我认为这是最好的学习方式),直到我得到一些无法理解的代码!请看一下:

如您所见,似乎在CheckProxy方法中,编译器生成了一个新类型!你知道这种方法到底发生了什么吗?我怎样才能理解代码?

0 投票
1 回答
99 浏览

c# - C# 事件 - 任何反射方式来区分简单事件和带有 add{...} remove {...} 的事件?

好的,当我正要在这里发帖时,我解决了这个问题。我一直在寻找一种方法来区分类似 反射event Action testEvt1;event Action testEvt1 { add { } remove { }}反射的东西,因为两者最终都是一对 add_testEvt1 remove_testEvt1 方法。令人惊讶的是, CompilerGeneratedAttribute 在这里没有帮助。

解决方案原来是寻找与事件同名的私有支持文件 - 编译器只会为简单事件生成一个,并且不会让您拥有其他同名字段。

如代码所示:

evt1Attrib 和 evt2Attrib 最终都为空。但是只能找到简单的 testEvt1 的支持文件,而不是 testEvt2。

如果其他人碰巧有同样的问题,我决定发布这个,也许会问,有没有人知道一种更简单的方法来区分 testEvt1 和 testEvt2 以及为什么编译器不添加 CompilerGeneratedAttribute 来添加和删除事件的方法?我想知道一种不依赖于将来可能会更改的支持字段命名规则的方法。

0 投票
7 回答
532 浏览

java - 编译器生成的默认构造函数会公开吗?

当我写一堂课Widget.java

编译器生成的构造函数是公共的还是默认的?

公众就像

而默认类似于

0 投票
1 回答
566 浏览

c++ - 抽象基类中的析构函数保护不是在 C++ 中继承的吗?

我在我的代码中发现了一个内存泄漏,这是由于仅调用对象的基类析构函数引起的。这个问题理解:我已经virtual在接口类的析构函数中添加了MyÌnterface。令我困惑的是,编译器显然为我的帮助类创建了一个标准的析构函数,MyHelper最终被调用。我用两个不同的编译器试过这个。

这让我非常惊讶,因为我观察到如果成员或基类引入限制,大多数默认实现都不会创建。为什么不继承析构函数的保护?

这里是上面示例代码的输出,它“显示”了缺失的SomeImplementation ctr

0 投票
1 回答
381 浏览

c# - 为什么会为 async/await 状态机生成布尔“标志”?

如果编译以下代码:

然后反编译它(我使用 dotPeek)并检查最重要的MoveNext方法,你会看到bool在开头附近声明了一个变量;dotPeek 为我选择了“flag”。

在这种情况下,您将在启动第一个异步调用后的默认 case 语句中看到该变量的一个后续使用者:

我已经尝试了六个比我最初的例子更复杂的例子,它们在退出方法之前只分配给这个变量是一致的。所以换句话说,在我迄今为止尝试过的所有情况下,这个变量不仅不会被消耗,而且只会在从方法返回之前立即被赋予一个非初始值——一个定义上赋值的时间点无用。

作为背景,我很享受尝试通过 C# -> JS 交叉编译器在 Javascript 中实现 async/await 的过程。我试图了解在什么情况下我需要考虑这个标志的效用。从表面上看,它似乎是虚假的,因此我应该忽略它。但是,我想了解为什么 C# 编译器会引入这个变量——我怀疑有更复杂的表达式会以一种有用的方式使用这个变量。

简而言之:为什么 C# 编译器会生成这个flag变量?

0 投票
1 回答
71 浏览

java - Netbeans 在 TopComponent 中重新生成损坏的代码。我该如何解决?

我已经处理这个问题一个多星期了,现在它开始影响我的工作效率。

我有一个应用自定义文档过滤器的 JTextBox。要添加它,我右键单击控件,进入自定义代码,并在所有内容下方添加此行:

现在,这是一个复制粘贴工作(因为我在其他地方使用过)。我想将过滤器设置为的字段称为TextField. 不小心点了确定,编译了,就炸了。呃,我明白我的错误了。我修复它,重新编译,我仍然得到错误。现在我的代码有这个:

当我进入自定义代码时,它只显示正确的(顶部)代码。我关闭 Netbeans,使用 Notepad++ 编辑文件并删除有问题的行,然后重新启动 Netbeans。现在它编译,我运行它,测试,然后当我返回时,代码重新生成了错误的行。

我炸毁了 Netbeans 的缓存,但什么也没做,所以我真的不知道如何解决这个问题。有接盘侠吗?

Netbeans 版本 7.3.1。

更新:我窥探了一下,在我的 Topcomponent 的 *.form 文件中找到了这个:

也许删除它可以解决问题,但我不确定,并且真的不想冒险破坏这个项目。

0 投票
1 回答
492 浏览

c# - 由于 <、> 和 $ 符号而无法编译代码

我有一个无法在 Visual Studio 中构建的程序集的 C# 代码。经过一番研究,我发现所有这些错误都是由 <、> 和 $ 符号引起的。分析 .NET 反射器中的程序集发现这些代码部分是由编译器创建的。这是一些带有这些错误的代码

在这里,每次使用 < 和 > 符号都会出现两个错误,而每次使用 <、$ 和 > 符号<Register>都会出现三个错误。<$>您认为可能导致这些错误的原因是什么?

0 投票
1 回答
533 浏览

c++ - 编译器生成的复制构造函数/赋值是否使用 const/volatile 呈现它的参数

如果需要,编译器可以为我们隐式定义一些函数,并且是否可以为该类正确定义它们。喜欢

  • 默认构造函数
  • 复制构造函数
  • 赋值运算符
  • 析构函数。

因此,编译器生成的复制构造函数/赋值是否将其参数作为const-referenceOR non-const-reference

如果确实如此,那么该决定的指导因素是什么。