[英]static_cast required when using std::get with enum class
根據c ++參考 , std::get
的模板參數是std::size_t
。 當這樣的參數是基本類型為std::size_t
的enum 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.