2017-05-05 7 views
3

^ (hat) operatorMath.Pow()関数のMSDNドキュメントを熟読しても、明白な違いはありません。 1つはありますか?一方が関数で他方が演算子とみなされるという違いは明らかである。これは動作しません。ハット^演算子対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()はより安全性の高いチェックをしていますか?それとも、もう一方のエイリアスの1つですか?

答えて

5

ILを調べる方法があります。以下の場合:

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

ILは、次のとおりです。

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 は次のとおりです。

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

よろしくお願い致します。どのようにしてILを検査するのですか(VS2017で)? – Toby

+2

VSでは個人的に私はちょうど[this](https://i.stack.imgur.com/ZRO4F.png)のような[LINQPad](https://www.linqpad.net/)にこのようなスニペットをチャックします。 )。 –

+0

涼しいですね、参考になりました。https://dotnetfiddle.net/が似ていますがオンラインで、IL :-)も表示されます – Toby