是否可以通过引用将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:错误:类型的非const引用的初始化无效 'enumTests&安培;'来自'enumTests'类型的右值
答案 0 :(得分:2)
enumTests e_Test = static_cast<enumTests>(i);
GetTest(e_Test);
i = static_cast<int>(e_Test);
是正确的方法。
以下编译,但遗憾的是,违反了严格的别名规则,因此是UB:
static_assert(std::is_same<decltype(i), std::underlying_type_t<enumTests>>::value);
GetTest(reinterpret_cast<enumTests&>(i)); // Compile but is UB
答案 1 :(得分:1)
您正在尝试将rvalue值绑定到非const引用。因此,您需要额外的变量将其作为左值传递。 请参阅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;
}