gpt4 book ai didi

c++ - 为什么我不能返回对压缩字段的引用?

转载 作者:可可西里 更新时间:2023-11-01 15:25:11 25 4
gpt4 key购买 nike

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

为什么我不能返回对压缩字段的引用?

最佳答案

有一个 gcc 错误报告 Cannot bind packed field涵盖了这一点,它说:

The C++ spec (C++03, Sects. 3.9, 3.9.1, 3.9.2) are very clear that T and "pointer to T" have implementation-specific alignment requirements. If you have a "pointer to T" then you may assume that it meets the alignment requirements. I'm sure the C spec has similar language.

In the OP's case, the following code could violate the alignment requirements

他们建议使用 alignment 属性来定义您自己的对齐类型,但它看起来并不奏效。

关于c++ - 为什么我不能返回对压缩字段的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27491432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com