- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个合法的C++(> = 14)是否导致char
被读取并保存到aCode
中?
enum class ECode : char { Code1 = 'a' };
std::istream& operator>>(std::istream& aIn, ECode& aCode)
{
return aIn >> (std::underlying_type_t<ECode>&)aCode;
}
return aIn >> static_cast<std::underlying_type_t<ECode>&>(aCode)
,这似乎不合法(“无法转换为对不相关类型的引用”。)
return aIn >> *static_cast<char*>(static_cast<void*>(&aCode))
最佳答案
如注释中所指出的,没有严格的别名冲突,因为char
可以别名任何类型。
在实践中,我怀疑任何真正的编译器除了“显而易见的”实现之外是否会做其他事情,即为枚举提供与基础类型相同的大小和表示形式。在这种情况下,您的reinterpret_cast
将会得到很好的定义并表现出预期的效果。
但是,标准(从C++ 17开始)似乎不能保证这一点。
据我所知,它仅指定可以将任何基础类型的值存储在枚举对象中,并且static_cast
可以无损地用于基础类型范围内的值。
关于sizeof(ECode) == sizeof(char)
是否必须保留的问题,存在a language lawyer question here,尽管答案似乎表明“标准实际上并没有这样说,但它们可能是真的”。
但是即使大小相同,也无法保证代表性。这些位可以以不同的顺序存储,并且static_cast
转换这些位。
在[basic.fundamental]中,它指定整数类型的表示形式,甚至有一个明确的脚注说枚举不是整数类型。
关于c++ - 枚举类的C样式强制转换为基础类型char的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62313882/
我有一个如下所示的数据框: person n start end 1 sam 6 0 6 2 greg 5 6 11 3 te
直到大约 1-2 个月前 android构建(任何应用程序的)在 Android Galaxy S 上完美运行.现在无法在此设备上安装 buid。我添加了标志 codename1.arg.androi
背景: 我的类(class)名为 ObjectListModel继承QAbstractListModel并包含 QObjectList .对象是行,它们的属性是列(使用 QMetaObject 设置)
我有一个 flex div (.parent) 和包含更多行的子 div(您猜对了,.child)。我的问题是我似乎无法在不破坏我的“网格”的情况下让每个 div .card 的边框具有相同的高度。当
我是一名优秀的程序员,十分优秀!