2010-05-27

よくわからないintegral promotion

intよりrankの低い整数型の値は、すべての値が表現できるのであれば、intに型変換できる。

あれ、long intとlong long intはどうなるのだろう。これらは、通常の整数型の値の型変換には定義されていない。

とすると、intからlongへの型変換は、integral promotionではなく、integral conversionになるのか? また、charからshortへの変換も、integral conversionなのか?

どうやら、そうなるようだ。これは、overload resolutionの順位にも影響するので、以下のようになる。

void f(short) ;
void f(int) ;
void f(long) ;
void f(long long) ;

int main()
{
    char x = 0 ;
    f(x) ; // call f(int)
}

なるほどなるほど、一瞬不思議に思ったが、当然だ。intを基本としているのだろう。

No comments: