sizeof運算符的結果似乎是size_t類型,它在Windows 64位上定義爲無符號long long。類型升級/轉換
考慮下面的一段(僞)代碼:
int func(unsigned long arg)
{
/* ... */
}
/* ... */
unsigned long herp = 3,
derp = 5,
durr = 7;
wchar_t wut;
func(/* ... */);
當func被稱爲如下什麼實際發生在這裏型推廣/換算的?
func((herp + derp) * durr * sizeof wut); // 1st example
是HERP,DERP和杜爾的值第一晉升爲unsigned long long然後再對結果進行評估後,結果被轉換回爲unsigned long?
而是,如下所示調用func時,是唯一發生類型轉換爲無符號long的轉換?
func((herp + derp) * durr * (unsigned long)sizeof wut); // 2nd example
考慮到類型轉換/提升,什麼是最適合/正確的方式來調用func?
'(herp + derp)'對'size_t'一無所知,所以不被提升。但算術計算的值在計算之前會提升爲本地整數類型(如果更短)。 –