gpt4 book ai didi

c++ - Unrestricted unions 是否与 C 兼容?

转载 作者:行者123 更新时间:2023-11-30 04:28:31 25 4
gpt4 key购买 nike

现在 C++11 允许您创建这样的 union

union U {
int z;
std::vector<char> data;
};

是否有可能以某种方式将此结构传递给接受常规 C union 的 C 库?怎么办?

最佳答案

你能通过那个 union 吗?不会。std::vector(以及除 std::array 之外的所有其他标准容器)不会生成已知 布局的类型。他们可能是 standard layout types , 但标准中没有给出特定的布局。因此,您不能将其传递给 C。

注意:“将其传递给 C”,我假设您的意思是“构建具有相同内存布局的等效 C 结构,以便 C 代码可以访问数据。”

但是您可以传递任何包含已知布局类型的 union ,只要所有类型都是标准布局类型即可。它们不必是微不足道的,但它们必须是标准布局。

此外,如果您不介意特定于编译器,您可以查看特定的 std::vector 实现(或使用特定的实现,如 boost::vector) 并设计一个等效的 C 结构来存储基本相同的数据。当然,这假设特定的实现确实是标准布局; C++ 标准不需要它,分配器的存在可能会改变这一点。

关于c++ - Unrestricted unions 是否与 C 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081391/

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