"位字段类型对于位数来说太小"错误是否属于C++标准?
Is the "Type of bit field too small for number of bits" error part of the C++ standard?
以下代码在Visual Studio 2008中生成MSVS编译错误C2034:
struct TestStruct {
unsigned short var1 : 7;
unsigned short : 9;
bool var2 : 1;
bool : 15; // C2034
};
错误C2034: 'TestStruct::struct TestStruct { unsigned short var1 : 7; unsigned short : 9; bool var2 : 1; bool : 7; bool : 8; };
但是,这两个代码片段都可以在我的Linux GCC编译器上编译。根据c++标准,一个编译器比另一个更正确吗?如果是,是哪一种,为什么?
是的,这是MSVS中的一个bug。标准状态在[class.bit]/1
[…整型常量表达式的值可能大于位字段类型的对象表示(3.9)中的位数;在这种情况下,额外的位被用作填充位,而不参与位域的值表示(3.9)。[…]
所以编译器应该添加额外的填充,只让你有等于CHAR_BIT * sizeof(bit_field_underlying_type)
的位数
相关文章:
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 检查 n2 是否是 n1 的倍数后结果错误,但根本没有错误
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 我的代码中是否有任何类型的错误,因为它没有给出正确的输出
- C++ LeetCode #377 的 DP 解决方案中,此代码是否有错误?
- GCC 编译器是否应该对涉及 [[fallthrough]] 属性的格式错误的C++代码进行诊断?
- 以下 OpenCV 源代码中是否存在错误?(#ifdef 没有 #else)
- 是否与赢得64位有关?错误:STATUS_ACCESS_VIOLATION
- 对逻辑使用std::out_of_range是否错误
- gcc 在这个概念定义中是否错误地评估了 std::d eclval ?
- C++ - 我是否错误地使用了fin.ignore()?
- 我是否错误地使用Xcode或错误地编写了该程序
- 我是否错误地使用了默认参数
- 我是否错误地使用了 ncurses 库中的 getch() 函数
- C++我是否错误地使用了void函数
- 我是否错误地使用了布尔运算符
- MSVC 是否错误地处理了类范围的静态与整数常量初始值设定项的链接
- 我是否错误地使用了Windows剪贴板?