gpt4 book ai didi

c++ - 强制C++类具有对齐的属性

转载 作者:行者123 更新时间:2023-12-02 09:53:11 25 4
gpt4 key购买 nike

考虑此类:

class C3
{
public:
uint16_t p1;
uint16_t p2;
uint8_t p3;
};
sizeof(C3)6。是否有任何编译器例程绕过对齐并强制其大小为 5?我尝试使用 alignas没有成功...

最佳答案

使用MSVC编译器(已包含VS-2015标记),可以使用 #pragma pack 指令设置类和结构的填充选项。这还允许您使用pushpop选项保存/恢复“默认”设置。
以下简短示例演示了这一点:

#include <iostream>

class C3 {
public:
uint16_t p1;
uint16_t p2;
uint8_t p3;
};

#pragma pack(push, 1) // Save current packing and set to single-byte
class C4 {
public:
uint16_t p1;
uint16_t p2;
uint8_t p3;
};
#pragma pack(pop) // Restore saved packing

class C5 {
public:
uint16_t p1;
uint16_t p2;
uint8_t p3;
};

int main()
{
std::cout << sizeof(C3) << std::endl; // 6
std::cout << sizeof(C4) << std::endl; // 5
std::cout << sizeof(C5) << std::endl; // 6 (again)
return 0;
}
许多其他编译器支持与MSVC #pragma pack等效的指令。

关于c++ - 强制C++类具有对齐的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62655448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com