16

我使用 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;

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

4

1 回答 1

4

有一个 gcc 错误报告无法绑定包含此内容的打包字段,它说:

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

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

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

于 2014-12-15T19:21:42.873 回答