[英]Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast) enum
[英]static_cast on integer to enum conversion
有一些函數將枚舉作為參數
void myfunc(myEnum input);
據我了解,如果必須為此函數提供整數,建議將其顯式轉換為枚舉,原因是所有整數可能都不是有效的枚舉值。
根據MSDN
“ static_cast運算符可以將整數值顯式轉換為枚舉類型。如果整數類型的值不在枚舉值的范圍內,則所得的枚舉值不確定。”
並按照C ++標准5.2.9靜態轉換-> 10
“整數或枚舉類型的值可以顯式轉換為枚舉類型。如果原始值在枚舉值(7.2)的范圍內,則該值不變。否則,未指定結果值(並且可能不在該范圍)。”
那么在這種情況下使用static_cast
什么意義呢? 是否有一些選項會引發枚舉范圍之外的值的異常(除了為此編寫顯式代碼)?
像往常一樣,編譯器只是在試圖阻止您腳踏實地。 這就是為什么您不能僅將int
傳遞給需要枚舉的函數。 編譯器理應抱怨,因為int
可能不匹配任何有效的enum
值。
通過添加強制類型轉換,您基本上可以告訴編譯器“閉嘴,我知道我在做什么” 。 您在此處傳達的信息是,您確保傳入的值“在枚舉值的范圍內”。 而且,您最好確保是這種情況,否則您將單程前往未定義的行為領域。
如果這樣做很危險,那么為什么編譯器不為整數值添加運行時檢查? 原因是與C ++一樣經常出現性能問題。 也許你只是從周圍的程序邏輯知道 int值將始終是有效的,你絕對不能浪費在無意義的運行時檢查的任何時間。 從語言設計的角度來看,這可能不是最合理的默認選擇,尤其是當您的目標是編寫可靠的代碼時。 但這就是C ++的工作方式:開發人員永遠不必為自己可能不想使用的功能付費。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.