2017-05-05 16 views
3

^ (hat) operatorMath.Pow() 함수에 대한 MSDN 설명서를 읽은 후에는 명시적인 차이가 없습니다. 하나 있습니까?Hat^operator vs Math.Pow()

분명히 하나는 함수이고 다른 하나는 연산자로 간주된다는 차이점이 있습니다. 이 작동하지 않습니다

Public Const x As Double = 3 
Public Const y As Double = Math.Pow(2, x) ' Fails because of const-ness 

그러나이됩니다

Public Const x As Double = 3 
Public Const y As Double = 2^x 

그러나 최종 결과를 생성하는 방법에 차이가? 예를 들어, Math.Pow()은 더 많은 안전 검사를 수행합니까? 또는 다른 하나의 별칭 일뿐입니다.

답변

5

IL을 검사하는 한 가지 방법이 있습니다. 경우 :

Dim x As Double = 3 
Dim y As Double = Math.Pow(2, x) 

일리노이는 다음과 같습니다

IL_0000: nop   
IL_0001: ldc.r8  00 00 00 00 00 00 08 40 
IL_000A: stloc.0  // x 
IL_000B: ldc.r8  00 00 00 00 00 00 00 40 
IL_0014: ldloc.0  // x 
IL_0015: call  System.Math.Pow 
IL_001A: stloc.1  // y 

그리고 위해 :

Dim x As Double = 3 
Dim y As Double = 2^x 

일리노이 은 다음과 같습니다

IL_0000: nop   
IL_0001: ldc.r8  00 00 00 00 00 00 08 40 
IL_000A: stloc.0  // x 
IL_000B: ldc.r8  00 00 00 00 00 00 00 40 
IL_0014: ldloc.0  // x 
IL_0015: call  System.Math.Pow 
IL_001A: stloc.1  // y 

IE 컴파일러는 설정되어있다 ^Math.Pow으로 호출하면 런타임에 동일합니다.

+0

대단히 감사합니다. 어떻게 일리노이 (VS2017에서)를 검사합니까? – Toby

+2

VS에서 잘 모르겠습니다 - 개인적으로 저는 [LINQPad] (https://www.linqpad.net/)에 이렇게 스 니펫을 집어 넣었습니다. [this] (https://i.stack.imgur.com/ZRO4F.png)). –

+0

멋지다. 참고로 https://dotnetfiddle.net/이 유사하지만 온라인이지만, IL :-)도 표시합니다. – Toby