1. 介紹型別的定義。

    class foo {
        int x;
      public:
        int get_x();
        void set_x(int new_x);
    };
    
  2. 介紹一個*詳細的型別說明符,*它指定以下名稱是類型別的名稱。如果已經宣告瞭類名,即使被其他名稱隱藏也可以找到它。如果類名尚未宣告,則為前向宣告。

    class foo; // elaborated type specifier -> forward declaration
    class bar {
      public:
        bar(foo& f);
    };
    void baz();
    class baz; // another elaborated type specifer; another forward declaration
               // note: the class has the same name as the function void baz()
    class foo {
        bar b;
        friend class baz; // elaborated type specifier refers to the class,
                          // not the function of the same name
      public:
        foo();
    };
    
  3. 模板的宣告中引入型別引數。

    template <class T>
    const T& min(const T& x, const T& y) {
        return b < a ? b : a;
    }
    
  4. 模板模板引數的宣告中,關鍵字 class 位於引數名稱之前。由於模板模板引數的引數只能是類别範本,因此這裡使用 class 是多餘的。但是,C++的語法需要它。

    template <template <class T> class U>
    //                           ^^^^^ "class" used in this sense here;
    //                                 U is a template template parameter
    void f() {
        U<int>::do_it();
        U<double>::do_it();
    }
    
  5. 注意,意義 2 和意義 3 可以組合在同一宣告中。例如:

    template <class T>
    class foo {
    };
    
    foo<class bar> x; // <- bar does not have to have previously appeared.
    

Version >= C++ 11

  1. 在列舉的宣告或定義中,將列舉宣告為作用域列舉

    enum class Format {
        TEXT,
        PDF,
        OTHER,
    };
    Format f = F::TEXT;