clang :3.8.0
MSVC:x64的19.00.24215.1

是什么原因导致编译器之间出现这种奇怪的差异? MSVC报告12,但Clang报告8!这里的正确/预期行为是什么?标准对此有什么要说的吗?

enum class CodeCompletionDeclKind {};

struct SwiftSemanticToken {
  unsigned ByteOffset;
  unsigned Length : 24;
  CodeCompletionDeclKind Kind : 6;
  bool IsRef : 1;
  bool IsSystem : 1;
};
static_assert(sizeof(SwiftSemanticToken) == 8, "Too big");

int main()
{
    std::cout << "Hello, world!\n";
}

最佳答案

包含位字段的类对象的大小将由实现定义。

class.bit/1:

10-08 05:19
查看更多