c11的新特性實在是太多了,這2個關鍵字關注的人倒是少了很多,其中有乙個原因便是編譯器支援得太慢了(vs到vs2013才支援上),不過這2個關鍵字那真是極為有用的,下面我們來看看。
【default關鍵字】
首先我們有乙個字串類:
class cstring
//析構函式
~cstring()
public:
void updatestring(const char* pstr) throw()
public:
char* getstr() const throw()
};我們可以這樣使用:
auto str = std::make_unique("123");
printf(str->getstr());但是這樣是不行的:
auto str = std::make_unique(); //失敗,因為沒有乙個無參建構函式
好,我們用default來:
class cstring
//析構函式
~cstring()
public:
void updatestring(const char* pstr) throw()
public:
char* getstr() const throw()
};於是我們可以這樣使用了:
auto str_def = std::make_unique();
str_def->updatestring(「123」);
printf(str_def->getstr() == nullptr ? "none":str_def->getstr());
【delete關鍵字】
假設我們有這樣乙個類,這個類是用於自動申請記憶體,進行raii式管理:
(避免麻煩那些什麼拷貝構造拷貝賦值移動構造什麼的就不寫了)
template
class cstackmemoryalloctor
~cstackmemoryalloctor()
public:
operator t*() const throw()
public:
t* getptr() const throw()
};我們這樣使用這個類:
cstackmemoryalloctor str(128);
wchar_t* pstr = str.getptr();
wcscpy(pstr,l"123\n");
wprintf(pstr);
但是別人也可以這樣使用:
auto p = std::make_unique>(128);
因為這個類依然可以進行預設new,我們不想讓人家進行new怎麼辦,老辦法就是這樣:
private:
void* operator new(std::size_t)
把new設定為private了,就行了,但是這樣如果別人嘗試new,那看到的錯誤提示簡直慘不忍睹。。。
於是c11的delete人性化多了:
public:
void* operator new(std::size_t) = delete;
當嘗試new的時候,提示十分友好,這個方法已被刪除。
這個delete可以用來刪任何你不爽的東西,比如拷貝構造,賦值拷貝什麼**毛的東西。
C 11的default和delete的說明
在c 11標準中的描述是 default it means that you want to use the compiler generated version of that function,so you don t need to specify a body.delete it means...
C11編輯器公升級和C11標準使用
c11中的一些特性需要對應的編譯器才能支援。而有些系統預設的編譯器並不支援c11,所以需要4.8及其以上的版本。以下採用c11才支援的std unordered set來進行測試。include include include include include using namespace std ...
Code Blocks介紹和使用C 11
2 工程使用 參考code blocks支援多種編譯器,包括gcc,mingw,digital mars,microsoft visual c borland c llvm clang,watcom,lcc和intel c 編譯器。雖然ide是為c 語言設計的,但是對其他語言也有一些支援,包括for...