[英]cast variable to enum after static cast
是否可以通過引用將static_cast變量轉換為函數而不必聲明枚舉。
bool GetTest(enumTests &e_Test)
{
//do something with test
}
enum enumTests
{
Test1 = 1,
Test2,
};
/* The below does NOT compile*/
int i = 1;
GetTest(static_cast<enumTests>(i));
/* The below compiles*/
enumTests e_Test = static_cast<enumTests>(i);
GetTest(e_Test);
錯誤
20:34:錯誤:從類型'enumTests'的右值對'enumTests&'類型的非常量引用進行了無效的初始化
enumTests e_Test = static_cast<enumTests>(i);
GetTest(e_Test);
i = static_cast<int>(e_Test);
是正確的方法。
following會編譯,但不幸的是,打破了嚴格的別名規則,UB也是如此:
static_assert(std::is_same<decltype(i), std::underlying_type_t<enumTests>>::value);
GetTest(reinterpret_cast<enumTests&>(i)); // Compile but is UB
您正在嘗試將右值綁定到非常量引用。 因此,您需要額外的變量將其作為左值傳遞。 請參閱https://en.cppreference.com/w/cpp/language/value_category以了解什么是左值和右值。
但是,不需要如圖所示顯式static_cast。
#include <iostream>
enum enumTests
{
Test1 = 1,
Test2,
};
bool GetTest(enumTests &e_Test)
{
e_Test = Test2;
return false;
//do something with test
}
int main()
{
int i = 1;
auto ie = enumTests(i);
GetTest(ie);
std::cout << ie;
i = ie;
std::cout << i;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.