非常简短的问题,但我现在无法在网上找到解决方案。
int test = 1 + 2;
Will 1 + 2
在运行时或编译时执行?
询问原因:
我认为大多数人有时会使用文字而不指定其使用原因或含义,因为他们不想通过运行计算来浪费一点性能,并且我相信计算发生在编译时并且对性能没有影响:
int nbr = 31536000; //What the heck is that?
代替
int nbr = 365 * 24 * 60 * 60; //I guess you know what nbr is supposed to be now...
由于您的示例本质上是常量表达式(即,它们仅包含常量或这样计算的结构),因此它们将在编译时评估 https://msdn.microsoft.com/en-us/library/aa691319(v=vs.71).aspx.
常量表达式是可以在以下位置完全求值的表达式:
编译时。
常量表达式的类型可以是以下之一:sbyte、byte、short、ushort、
int、uint、long、ulong、char、float、double、decimal、bool、string、
任何枚举类型或 null 类型。
常量表达式中允许使用以下结构:
- 文字(包括空文字)。
- 对类和结构类型的 const 成员的引用。
- 对枚举类型成员的引用。
- 带括号的子表达式,它们本身就是常量表达式。
- 强制转换表达式,前提是目标类型是上面列出的类型之一。
- 预定义的
+
, –
, !
, and ~
一元运算符。
- 预定义的
+
, –
, *
, /
, %
, <<
, >>
, &
, |
, ^
, &&
, ||
, ==
, !=
, <
, >
, <=
, and >=
二元运算符,前提是每个操作数都属于上面列出的类型。
- The
?:
条件运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)