首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在静态转换之后将变量转换为枚举

在静态转换之后将变量转换为枚举
EN

Stack Overflow用户
提问于 2018-06-08 05:38:45
回答 2查看 78关注 0票数 -1

是否可以通过引用将static_cast变量转换为函数,而不必声明枚举。

代码语言:javascript
复制
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&”的非常数引用时无效

EN

回答 2

Stack Overflow用户

发布于 2018-06-08 07:15:49

代码语言:javascript
复制
enumTests e_Test = static_cast<enumTests>(i);
GetTest(e_Test);
i = static_cast<int>(e_Test);

才是正确的方式。

以下代码可以编译,但不幸的是,它违反了严格的别名规则,UB也是如此:

代码语言:javascript
复制
static_assert(std::is_same<decltype(i), std::underlying_type_t<enumTests>>::value);
GetTest(reinterpret_cast<enumTests&>(i)); // Compile but is UB
票数 2
EN

Stack Overflow用户

发布于 2018-06-08 05:55:34

您正在尝试将右值绑定到非常数引用。所以你需要额外的变量,将它作为一个左值传递。请参阅https://en.cppreference.com/w/cpp/language/value_category了解什么是左值和右值。

但它不需要显式地static_cast,如下所示。

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50750533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档