以往的enum型別將列舉成員的作用域暴露在列舉變數之外,使用者不需要指定列舉型別就可以直接使用列舉的內容,這就有可能會造成名字的衝突,為了解決該你問題,c++11引入了強型別的列舉型別(strongly typed enums ).
#include "stdafx.h"
#include using namespace std;
enum oldenum
;int _tmain(int argc, _tchar* argv)
;enum oldenum2
;int _tmain(int argc, _tchar* argv)
oldenum 和 oldenum2 都定義了列舉成員 second,在使用時由於不需要名字的限定,編譯器無法知道具體使用哪乙個列舉成員,會產生編譯錯誤。
強型別enum資料型別在定義時和舊風格不同,需要新增 class 關鍵字。
#include "stdafx.h"
#include using namespace std;
enum class strongtypeenum
;enum class strongtypeenum2
;int _tmain(int argc, _tchar* argv)
system("pause");
return 0;
}
由上述示例可以看出強型別列舉的新特性:
(1)使用enum class 進行定義
(2)避免了名字衝突,strongtypeenum 和 strongtypeenum2都定義了成員 second,但是由於各屬於各自的空間,不會造成名字衝突
(3)使用列舉成員必須通過名字的限定
(4)列舉變數不能轉換為整型
(5)不同的列舉變數之間不能互相賦值。
c 11學習筆記
c 98的 std auto ptr已經被徹底遺棄了,取而代之的是unique ptr shared ptr與weak ptr。大部分時候我們自己手動申請記憶體方式記憶體都是沒有問題的,問題是如果程式很大了之後,乙個複雜的物件,多次拷貝的代價非常高,很多地方都會使用到,只存在乙份拷貝顯然是最好的,這...
C 11 強型別列舉(enum)
c 11之前的enum型別是繼承c的,不溫不火 c 11對enum動刀了,加強了型別檢查,推出強型別enum型別,眼前一亮 使用過qt 的都知道,早就應該這麼做了,用的很爽!一 c中enum型別的侷限 1 非強型別作用域 enum type1 enum type2 問題來了,兩種列舉型別都有a列舉常...
C 11學習筆記 Type Support
其實主要還是對c 的std庫的學習吧,雖然用的不少但是對c 的全貌還不太了解。主要包括3個部分 基本型別 rtti 萃取技術 traits size t 用的太多了,不說了。ptrdiff t 乙個有符號的型別,通常用來表示兩個指標相減的結果,是乙個機器相關的型別。和size t不同的是,size ...