从语法上来说,我看到它们无限循环,直到达到break语句,但它们是否编译为同一个东西?因为它没有条件可以检查吗?除了代码可读性之外,还有差别吗?
Fre*_*örk 36
鉴于此输入:
private static void ForLoop()
{
int n = 0;
for (; ; )
{
Console.WriteLine(n++);
}
}
private static void WhileLoop()
{
int n = 0;
while (true)
{
Console.WriteLine(n++);
}
}
Run Code Online (Sandbox Code Playgroud)
...你得到这个输出:
.method private hidebysig static void ForLoop() cil managed
{
// Code size 14 (0xe)
.maxstack 3
.locals init ([0] int32 n)
IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: dup
IL_0004: ldc.i4.1
IL_0005: add
IL_0006: stloc.0
IL_0007: call void [mscorlib]System.Console::WriteLine(int32)
IL_000c: br.s IL_0002
} // end of method Program::ForLoop
.method private hidebysig static void WhileLoop() cil managed
{
// Code size 14 (0xe)
.maxstack 3
.locals init ([0] int32 n)
IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: dup
IL_0004: ldc.i4.1
IL_0005: add
IL_0006: stloc.0
IL_0007: call void [mscorlib]System.Console::WriteLine(int32)
IL_000c: br.s IL_0002
} // end of method Program::WhileLoop
Run Code Online (Sandbox Code Playgroud)
非常相似,我会说(相同,甚至).
Mik*_*ron 21
在现代编译器中,绝对没有.
然而,从历史上看,for(;;)它实现为单跳,同时while(true)也检查为真.
我更喜欢while(true),因为它让我更清楚我在做什么.
| 归档时间: |
|
| 查看次数: |
3265 次 |
| 最近记录: |