本文參考:http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/#ibm-pcon
C++11 標准的兩個新特性:defaulted 和 deleted 函數。對於 defaulted 函數,編譯器會為其自動生成默認的函數定義體,從而獲得更高的代碼執行效率,也可免除程序員手動定義該函數的工作量。對於 deleted 函數, 編譯器會對其禁用,從而避免某些非法的函數調用或者類型轉換,從而提高代碼的安全性
C++ 的類有四類特殊成員函數,它們分別是:默認構造函數、析構函數、拷貝構造函數以及拷貝賦值運算符。這些類的特殊成員函數負責創建、初始化、銷毀,或者拷貝類的對象。如果程序員沒有顯式地為一個類定義某個特殊成員函數,而又需要用到該特殊成員函數時,則編譯器會隱式的為這個類生成一個默認的特殊成員函數。
defaulted函數的提出
1. 減輕程序員的編程工作量;2. 獲得編譯器自動生成的默認特殊成員函數的高的代碼執行效率。
程序員只需在函數聲明後加上“=default;
”,就可將該函數聲明為 defaulted 函數,編譯器將為顯式聲明的defaulted 函數自動生成函數體。
deleted函數的提出
為了能夠讓程序員顯式的禁用某個函數,C++11 標准引入了一個新特性:deleted 函數。程序員只需在函數聲明後加上“=delete;
”,就可將該函數禁用。
deleted 函數特性還可用於禁用類的某些轉換構造函數,從而避免不期望的類型轉換。
deleted 函數特性還可以用來禁用某些用戶自定義的類的 new
操作符,從而避免在自由存儲區創建類的對象。
注意:
只有4類特殊成員函數才能被聲明為defaulted函數,而deleted函數特性並無此限制