摘要訊息 : 被刪除的函式也參與了編碼期多型.

0. 前言

《C++ 學習筆記》中, 我們已經詳細講述過了被刪除的函式, 這篇文章是針對《C++ 學習筆記》中的被刪除的函式進行補充. 如果閣下沒有學習過 C++ 中的被刪除的函式, 那麼建議先閱讀《C++ 學習筆記》.

更新紀錄 :

  • 2022 年 5 月 28 日進行第一次更新和修正.

1. 被刪除的函式

被刪除的函式不僅僅可以被用在類別的成員函式上, 還可以被用於任何普通函式. 被刪除的函式屬於編碼器多型的一種表達, 它可以禁止某些多載函式, 禁止某些函式的特製化 :

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

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

class Foo {
public:
    template <typename T>
    void f(T *);        // OK
    template <>
    void f<void>(void *) = delete;      // 禁止 void * 型別的特製化
};
template <>
void Foo::f<int>(int *) = delete;     // 寫在類別之外, 禁止 int * 型別的特製化