所以,我发现了一个类似的问题 here ,但答案更多的是关于风格以及你是否能够做到。
我的问题是,当您调用一个返回对象的非 void 函数但您从未分配或使用所述返回对象时,实际会发生什么?所以,少说你是否可以,因为我绝对知道你可以并且理解上面链接的另一个问题......编译器/运行时环境是做什么的?
这不是特定于语言的问题,但如果您回答,请说明您所指的语言,因为行为会有所不同。
最佳答案
我相信对于 C# 和 Java,结果最终都会在堆栈上,然后编译器会强制弹出指令忽略它。 Eric Lippert 在 "The void is invariant" 上的博客文章有更多关于这方面的信息。
例如,考虑以下 C# 代码:
using System;
public class Test
{
static int Foo() { return 10; }
public static void Main()
{
Foo();
Foo();
}
}
为 Main
方法生成(由 MS C# 4 编译器)的 IL 是:
.method public hidebysig static void Main() cil managed
{
.entrypoint
.maxstack 8
L_0000: call int32 Test::Foo()
L_0005: pop
L_0006: call int32 Test::Foo()
L_000b: pop
L_000c: ret
}
注意对 pop
的调用 - 如果您将 Foo
设为 void 方法,这些调用就会消失。
关于c# - 调用非 void 函数而不使用其返回值。实际发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3998368/