1. 程式人生 > 程式設計 >詳解c++11以正確的姿勢輸出enum class的值

詳解c++11以正確的姿勢輸出enum class的值

c++11新增了enum class,相比傳統的enum好處多了很多,但也有些讓人不太爽的地方,如:輸出到std流時會報錯,進行了強轉則沒有資訊輸出,那麼,到底該如何將enum class的值出到std流呢?

提供這個enum class的原因是因為舊的enum有不少缺點。簡單描述一下:

1. 容易被隱式轉換成int

2. underlying type 指的是編譯器實現者幕後的實現細節導致了跨平臺,跨編譯器的不一致性。尺寸的不可估計等等。

3. 沒有嚴格的scope界限

下面,介紹一種通過過載<<操作符的方法來實現,如下:

#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內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!