gpt4 book ai didi

c++ - 如何在对 int 和作用域枚举的引用之间进行 static_cast?

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:51 32 4
gpt4 key购买 nike

我有以下枚举和输入流运算符:

enum class MsrEncryptionStatus : unsigned char
{
Unknown = 0xFF,
None = 0,
Ksn,
Dukpt,
Other
};

inline std::istream& operator>>(std::istream& s, MsrEncryptionStatus& status)
{
return s >> static_cast<unsigned&>(status);
}

operator>>的上述实现由于我进行类型转换的方式而无法编译。 Clang 提示:

main.cpp:34:16: error: non-const lvalue reference to type 'unsigned int' cannot bind to a value of unrelated type 'MsrEncryptionStatus'
return s >> static_cast<unsigned&>(status);
^ ~~~~~~

我想做的是避免定义一个变量来临时保存来自输入流的值然后 static_cast稍后。有人可以帮助我了解我在这里缺少的东西吗?我觉得我错过了一个基本的部分 static_cast左值上的函数,例如,感觉就像是在这里创建了一个临时的,如果这是真的,我不能将它绑定(bind)到一个非 const 左值引用。

最佳答案

我的编译器也拒绝进行静态转换,但由于您的其他义务,临时变量无论如何都更好。

您需要读取该值,根据 MsrEncryptionStatus 对其进行验证,然后将其分配给状态或设置故障位。

这里是cppreference推荐的模板

std::istream& operator>>(std::istream& is, T& obj)
{
// read obj from stream
if( /* T could not be constructed */ )
is.setstate(std::ios::failbit);
return is;
}

关于c++ - 如何在对 int 和作用域枚举的引用之间进行 static_cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38468579/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com