gex*_*ide 11 c++ gcc reference packed c++11
我使用g ++来编译带有压缩字段的代码.但是,我尝试返回对打包字段的引用时收到错误.
例:
struct __attribute__((packed)) Foo {
int* ptr;
uint16_t foo;
int*& getPtr(){
return ptr;
}
};
Run Code Online (Sandbox Code Playgroud)
产量错误:
test.cpp:22:14: error: cannot bind packed field ‘((Foo*)this)->Foo::ptr’ to ‘int*&’
return ptr;
Run Code Online (Sandbox Code Playgroud)
为什么我不能返回对打包字段的引用?
有一个 gcc 错误报告Cannot Binding Packed Field涵盖了这一点,它说:
C++ 规范(C++03,第 3.9、3.9.1、3.9.2 节)非常清楚地表明 T 和“指向 T 的指针”具有特定于实现的对齐要求。如果您有一个“指向 T 的指针”,那么您可以假设它满足对齐要求。我确信 C 规范有类似的语言。
在OP的情况下,以下代码可能违反对齐要求
他们建议使用alignment属性来定义您自己的对齐类型的解决方法,但它看起来不起作用。