c++新特性之default,delete
用法=default 表示使用編譯器為我們提供的實現,=delete表示刪除函式,不實現。
=default =delete一般只能用在編譯器為我們生成的函式上,比如建構函式,拷貝構造,析溝函式(不要使用=delete),賦值等。
=delete可以用在普通成員函式,但是沒有意義。=delete修飾析構函式時,無法進行釋放物件,因此無法生成臨時變數,無法進行delete,也無法當作父類。
下面進行測試:
struct complex
void print() = delete; //ok
//void print2() = default; //errror
~complex()=delete;
};int main()
在c++11之前如果我們自行定義了乙個建構函式,那麼編譯器就不會生成乙個預設的建構函式。
在c++11中我們可以加上=default,獲得並使用預設的建構函式。
例如:
class zoo
zoo() = default;
zoo(const zoo&) = delete;
zoo(zoo&&) = default;
zoo& operator=(const zoo&)=default;
zoo& operator=(const zoo&&)= delete;
virtual ~zoo(){}
private:
int d1,d2;
}
其他
空類什麼時候不空?
我們定義乙個空類,編譯器就會為它宣告乙個拷貝構造,乙個拷貝賦值,和析構,建構函式。這些函式都是public且inline.
class empty{};
我們定義了empty,當我們沒有呼叫構造,析構等函式時,編譯器是不會給我們合成的。
唯有這些函式被呼叫時,它們才會被編譯器合成。
常見用法nocopy
將拷貝相關的**delete,實現nocopy 功能
class nocopy
當我們需要實現這個功能時只需要繼承 nocopy就可以了。
當然實現nocopy還有其他方式,將拷貝構造,拷貝賦值的屬性變為private。這種方式對於友元是無效的。
如下是boost::noncopyable實現。
class noncopyable
~noncopyable(){}
private:
noncopyable(const noncopyable&){}
const noncopyable& operator=(const noncopyable&){}
}
c 之函式新特性
void fun int i,int j 5 int k 10 void fun int i,int j 5,int k 錯誤,沒有預設值的引數放前面實參可以覆蓋形參的值 什麼是函式過載?在相同的作用域內,用同一函式名定義的多個函式 引數個數和引數型別不同 int getmax int x,int ...
C 程式設計題之新特性
1.語言可用性的強化 1 nullptr 本質還是0,但相對於null提供了型別 2 範圍for 3 auto自動推導型別 4 迭代器遍歷 5 繼承構造與委託構造 6 override 修飾虛函式,編譯器將檢查基類的函式是否存在這樣的虛函式 7 final 修飾類,表示該類不可繼承 修飾虛函式,表示...
C 4 0 新特性之引數
c 4.0中新加了幾種引數,今天來了解一下 1.預設引數 c 4.0 現在對方法,構造器,以及索引器支援使用可預設的引數 當引數的預設值作為宣告的一部分被指定的時候,引數就是可預設的。static void changevalue intx,inty 3 int y 有乙個預設的引數3,因此它是乙個...