为什么我不能返回对打包字段的引用?

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)

为什么我不能返回对打包字段的引用?

Sha*_*our 5

有一个 gcc 错误报告Cannot Binding Packed Field涵盖了这一点,它说:

C++ 规范(C++03,第 3.9、3.9.1、3.9.2 节)非常清楚地表明 T 和“指向 T 的指针”具有特定于实现的对齐要求。如果您有一个“指向 T 的指针”,那么您可以假设它满足对齐要求。我确信 C 规范有类似的语言。

在OP的情况下,以下代码可能违反对齐要求

他们建议使用alignment属性来定义您自己的对齐类型的解决方法,但它看起来不起作用。