詳解c++11以正確的姿勢輸出enum class的值
c++11新增了enum class,相比傳統(tǒng)的enum好處多了很多,但也有些讓人不太爽的地方,如:輸出到std流時會報錯,進行了強轉(zhuǎn)則沒有信息輸出,那么,到底該如何將enum class的值出到std流呢?
提供這個enum class的原因是因為舊的enum有不少缺點。簡單描述一下:
1. 容易被隱式轉(zhuǎn)換成int
2. underlying type 指的是編譯器實現(xiàn)者幕后的實現(xiàn)細節(jié)導致了跨平臺,跨編譯器的不一致性。尺寸的不可估計等等。
3. 沒有嚴格的scope界限
下面,介紹一種通過重載<<操作符的方法來實現(xiàn),如下:
#include <iostream> #include <sstream> enum class error_code { ok=0, invalid_args=1, runtime_error=2, //.. }; //重載operator<<的操作符,使error_code支持<<輸出 std::ostream & operator<<(std::ostream &os,const error_code &ec) { os<<static_cast<std::underlying_type<error_code>::type>(ec); return os; } using namespace std; int main(int argc,char *argv[]) { cout<<error_code::ok<<endl; cout<<error_code::invalid_arg<<endl; cout<<error_code::runtime_error<<endl; stringstream ss; ss<<error_code::runtime_error; return 0; }
到此這篇關于詳解c++11以正確的姿勢輸出enum class的值的文章就介紹到這了,更多相關c++11 輸出enum class內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)LeetCode(63.不同的路徑之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(63.不同的路徑之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07C語言實現(xiàn)通訊錄的八種功能(添加、刪除、查找、修改、顯示、排序、退出、清空)
本文主要介紹了C語言實現(xiàn)通訊錄的八種功能,主要包括添加、刪除、查找、修改、顯示、排序、退出、清空,感興趣的可以了解一下2023-09-09