在《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 * 型別的特製化
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :