2010-01-14

C++0x本:説明したくない事

説明したくない事。以下のコードがコンパイルできること。

template<class T1, class T2 = int> class A;
template<class T1 = int, class T2> class A {};

// デフォルト引数を後で指定できる。
void f(int) ;
void f(int = 0) {};

int main()
{
    // A<int, int>
    //複数のdeclarationにおける、テンプレート引数のデフォルト引数はマージされる。
    A<> a ;

    // 関数から関数ポインタへのキャスト
    // アンパサンドを省略できる。
    void(*p)(int) = f ;

    // 初期化しなくてもいい。
    int x ;

    // sizeofには括弧がいらない。
    sizeof x ;

    // C99互換のuglyにも程がある整数型。
   // <cstdint>を使うべき。
    long long int y ;
}

これらは、ほんの一例である。かなり原理主義な部分もある。

しかし、テンプレート引数のデフォルト引数のマージを除いて、実際にこれらは使われている。解説しないわけにはいかない。

追記:文字列リテラルを非constなポインタに、暗黙的に変換することはできなくなった。

No comments: