我使用g ++编译带有压缩字段的代码。但是,我在尝试返回对打包字段的引用时收到错误。
示例:
struct __attribute__((packed)) Foo {
int* ptr;
uint16_t foo;
int*& getPtr(){
return ptr;
}
};
产生错误:
test.cpp:22:14: error: cannot bind packed field ‘((Foo*)this)->Foo::ptr’ to ‘int*&’
return ptr;
为什么我不能返回对打包字段的引用?
答案 0 :(得分:3)
有一个gcc错误报告Cannot bind packed field涵盖了这一点,它说:
C ++规范(C ++ 03,Sects.3.9,3.9.1,3.9.2)非常清楚T和“T指针”具有特定于实现的对齐要求。如果你有一个“T指针”,那么你可以认为它符合对齐要求。我确定C规范有类似的语言。
在OP的情况下,以下代码可能违反对齐要求
他们建议使用alignment
属性来定义您自己的对齐类型,但它看起来不像是有效。