是否可以通过引用将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&”的非常数引用时无效
发布于 2018-06-08 07:15:49
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
发布于 2018-06-08 05:55:34
您正在尝试将右值绑定到非常数引用。所以你需要额外的变量,将它作为一个左值传递。请参阅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;
}
https://stackoverflow.com/questions/50750533
复制相似问题