.net Hat^operator vs Math.Pow()

.net Hat^operator vs Math.Pow(),.net,vb.net,pow,exponentiation,.net,Vb.net,Pow,Exponentiation,仔细阅读了和函数的MSDN文档后,我看不出有什么明显的区别。有吗 一个是函数,而另一个被视为运算符,这显然是不同的,例如,这将不起作用: 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 但它们如何产生最终结果有区

仔细阅读了和函数的MSDN文档后,我看不出有什么明显的区别。有吗

一个是函数,而另一个被视为运算符,这显然是不同的,例如,这将不起作用:

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()
是否进行更多的安全检查?或者一个只是另一个的别名?

一种方法是检查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还包括:


IE编译器已将
^
转换为调用
Math.Pow
-它们在运行时是相同的。

在VS中不确定-我个人只是将类似的代码片段插入,如.Cool,仅供参考,我刚刚发现它做得类似,但在线,也显示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