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:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.