《C++ 學習筆記》中, 我們詳細說明了 C++ 11 引入的被刪除的函式. 但是那還不夠, 所以我們在這裡作一個補充

被刪除的函式不僅僅可以被用在類別的成員函式上, 還可以被用於任何地方

被刪除的函式可以用於編碼器的多型. 首先, 它可以禁止某些多載函式 :

void f(int);        //OK
void f(char) = delete;      //禁止傳入 char 型別的引數, 函式 f 不接受 char 型別的引數到 int 型別的引數的隱含型別轉化

它還可以禁止某些函式的特製化 :

template <typename T>
void f(T);      //OK
template <typename T>
void f(T *) = delete;       //禁止指標型別的特製化

類別之中也可以通過被刪除的函式來禁止某些型別的特製化 :

class Foo {
public:
    template <typename T>
    void f(T *);        //OK
    template <>
    void f<void>(void *) = delete;      //禁止 void * 型別的特製化
    //...
};

當然, 也可以把它寫在函式之外 :

class Foo {
public:
    template <typename T>
    void f(T *);        //OK
    //...
};
template <>
void Foo::f<void>(void *) = delete;     //禁止 void * 型別的特製化