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

时间:2014-12-15 19:17:03

标签: c++ c++11 gcc reference packed

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

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

1 个答案:

答案 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属性来定义您自己的对齐类型,但它看起来不像是有效。

相关问题