最近一次面试中,我被问及有关C++结构体字段对齐的问题,并推测C和C++在结构体打包方面采用了相同的策略。
然而,这是错误的假设。面试官说,通常情况下,C和C++在结构体打包方面采用不同的方式,我们永远不应该期望相反的结果。在我看来,这是一个奇怪的陈述。在C++中,没有适用于双语C/C++头文件的pack "C"
限定符。
因此,在实践中,这意味着您不能创建一个C++结构体并将其传递给C库,因为通常情况下,它的字段将以不同的方式对齐并具有不同的偏移量。但是,事实上,大多数程序员严重依赖此互操作性,直到将指向C POD结构的指针转换为C++包装器周围的引用,并带有一些辅助方法。请您澄清这个问题吗?
pack
edstruct
发出特殊代码,该代码按字节读取int
并将它们组装到寄存器中(反之亦然)。与手动(反)序列化相同。而且pack
指令并不标准,也不被所有编译器支持。 - too honest for this site