【发布时间】:2017-02-18 10:46:30
【问题描述】:
Clang:3.8.0 MSVC:19.00.24215.1 用于 x64
什么可能导致编译器之间出现这种奇怪的差异? 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";
}
【问题讨论】:
-
包含位域的结构的大小由实现定义。见注释部分:en.cppreference.com/w/cpp/language/bit_field 具体实现定义:“关于类对象中位域的实际分配细节的一切”
-
@RichardCritten:为什么不写答案而不是评论?
-
@ChristianHackl 正在打电话,格式化令人沮丧
标签: c++ visual-c++ clang language-lawyer sizeof