簡體   English   中英

轉換值類型常量

[英]Casting value-type constants

這不是我真正擔心性能的問題,而是更多的學術問題。 我真的很好奇。 我還從有限的編程經驗中學到,編譯器只有一半的時間才是明智的。

我有一個靜態類,其中定義了一個常量int ,我需要將該常量除以另一個整數。 現在,我需要從該除法返回的浮點值,所以不能只將它們都保留為整數。

const int CONSTANTINTEGER = 69;
int integer = 0;
float floatValue = 0f;

for(integer = 0; integer < CONSTANTINTEGER; integer++) {
    float floatValue = integer / (float)CONSTANTINTEGER;
    //use floatValue for algorithm.....
}

現在,我的問題是:編譯器是否足夠聰明,可以代替(float)CONSTANTINTEGER創建一個常量浮點數,還是將整數轉換為每個循環的浮點數?

語言規范在這里幫助了我們。 C#5規范的7.19節規定:

常量表達式必須是空文字或具有以下類型之一的值:sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal,bool,object,string或任何其他類型枚舉類型。 常量表達式中僅允許以下構造:

  • ...
  • 如果目標類型是上面列出的類型之一,則強制轉換表達式。

...

只要表達式滿足上面列出的要求,就會在編譯時對表達式求值。 即使表達式是包含非恆定構造的較大表達式的子表達式,也是如此。

您還可以通過查看IL來驗證這一點,在這種情況下,它具有:

IL_000a:  ldc.r4     69.

在加載除法運算的除數時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM