簡體   English   中英

在枚舉類上使用std :: get時需要static_cast

[英]static_cast required when using std::get with enum class

根據c ++參考std::get的模板參數是std::size_t 當這樣的參數是基本類型為std::size_tenum class而不是隱式轉換時,為什么需要顯式轉換?

請參閱以下示例

#include <tuple>

enum class labels : std::size_t { red, green, blue };

int main()
{
  std::tuple<int, int, double> a;
  // std::get<labels::red>(a) = 0;
  std::get<static_cast<std::size_t>(labels::red)>(a) = 0;
  std::get<static_cast<std::size_t>(labels::green)>(a) = 0;
  std::get<static_cast<std::size_t>(labels::blue)>(a) = 0;

  return 0;
}

取消注釋該行會引起編譯錯誤(gcc 7.3.0)

tuple.cpp:8:26: error: could not convert template argument ‘red’ from ‘labels’ to ‘long unsigned int’
   std::get<labels::red>(a) = 0;

這是因為enum class (與簡單的enum相反)不能隱式轉換為數字類型。 您需要顯式轉換它以獲得數字值,例如使用static_cast<>()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM