我曾经是Windows上的C++程序员.我知道编译器会优化C++中的三元运算符.
C++代码:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int result = argc > 3 ? 1 : 5;
printf("%d", result);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
由于管道内容,生成的本机代码如下所示(当然是Release模型):
int result = argc > 3 ? 1 : 5;
00B21003 xor eax,eax
00B21005 cmp dword ptr [argc],3
00B21009 setle al
00B2100C lea eax,[eax*4+1]
Run Code Online (Sandbox Code Playgroud)
C#代码:
namespace TernaryOperatorCSharp
{
static void Main(string[] args)
{
int argc = args.Length;
int result = argc > 1 ? 2 : 5;
System.Console.WriteLine(result);
}
}
Run Code Online (Sandbox Code Playgroud)
我查找了生成的本机代码JIT,但根本没有优化(仍然是两个跳转指令).
int …Run Code Online (Sandbox Code Playgroud)