限制作用域列舉

2021-10-09 06:36:27 字數 1165 閱讀 9933

enum class fsm_operatingmode ;
上面這種列舉是限定作用域的一種列舉型別,列舉關鍵字之後接的class ,是限制其作用域。

列舉作用域(enumeration scope)是指列舉型別的成員的名字的作用域,起自其宣告之處,終止列舉定義結束之處。c語言規定,列舉型別的成員(enumerator)的可見範圍被提公升至該列舉型別所在的作用域內。這被認為有可能汙染了外部的作用域,為此,c++11引入了列舉類(enum class)解決此問題。

定義不限定作用域的列舉型別(unscoped enumeration)時省略掉關鍵字class(或struct),列舉型別的名字是可選的。列舉成員:在限定作用域的列舉型別中,列舉成員的名字遵循常規的作用域準則,並且在列舉型別的作用域外是不可訪問的。與之相反,在不限定作用域的列舉型別中,列舉成員的作用域與列舉型別本身的作用域相同。

normal, transitioning, estop, edamp 就是列舉量,它們對應的值是從0-3,以此類推

這些值,所以使用的時候可以是a= fsm_operatingmode::estop ,或者fsm_operatingmode::normal表示(因為這裡已經是有限制作用域,所以就像class中的成員一樣來表示列舉量)如果沒有限制作用域,就像下面,是有值的,假如賦值時,超過可能的值的情況,編譯器則會報錯、警告

列舉只有賦值運算子,沒有算術運算子。

enum color ;                    // plain enum

enum card ; // card的值就有red_card (0)..以此類推

enum class animal ; // enum class

enum class mammal ; // mammal 的值就是mammal::kangaroo...等

設定列舉量的值

enum bits;
可以使用賦值運算子來顯式地設定列舉量的值;

指定的值必須是整數,也可以只顯式地定義其中的一些列舉量的值;

enum bigstep;
這裡,first在預設情況下為0,後面沒有被初始化的列舉量的值將比其前面的列舉量大1。因此,third的值是101;

帶字數限制的文字域製作

首先放一張效果圖,符合你的需求再往下看 主要功能 textarea字數統計 var wordtool 主要功能 剩餘字數統計 param sel 文字框外層div的id值,帶 countinputnum function sel textarea.on focus function 主要功能 初始化...

作用域內列舉(C 11)

作用域內列舉 includeusing namespace std 下面這兩種定義列舉的方式有錯誤,錯誤提示為列舉數sum重定義。在c 11之前我們不能在類中定義兩個列舉型別有相同的列舉數。這樣會導致列舉數重定義的錯誤。class test1 enum class test2 enum age c ...

C 列舉型別作用域的思考

c 中的列舉型別繼承於 c 語言。就像其他從 c 語言繼承過來的很多特性一樣,c 列舉也有缺點,這其中最顯著的莫過於作用域問題 在列舉型別中定義的常量,屬於定義列舉的作用域,而不屬於這個列舉型別。例如下面的示例 enum fileaccess fileaccess access read 正確 fi...