摘要訊息 : 被刪除的函式也參與了編碼期多型.
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 * 型別的特製化
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :