工作草案明確地呼籲,默認函數必須是特殊的成員函數(例如複製構造函數,默認構造函數等,(§8.4.2.1-1))。這是非常有意義的。任何函數都可以是刪除函數嗎?
但是,我看不到刪除函數(第8.4.3節)的任何此類限制。是對的嗎?
換句話說這三個例子有效c++0
?
struct Foo
{
// 1
int bar(int) = delete;
};
// 2
int baz(int) = delete;
template< typename T >
int boo(T t);
// 3
template<>
int boo<int>(int t) = delete;
什麼是甚至是刪除的功能? – Puppy 2010-05-20 16:06:19
刪除的函數是一個如果它沒有被刪除就會存在的函數。例如。您可以刪除課程副本。這略高於將其私有未實現,這有兩個原因。 1.閱讀代碼時更明顯,2.可以得到更清晰的錯誤信息。 – MSalters 2010-05-21 08:52:03
@ MSalters:您也可以刪除不存在的功能,阻止它們的使用。例如。給出'void f(double); void f(int)= delete;',f(42)現在是一個錯誤,而不是使用隱式轉換。 – 2010-10-12 16:14:23