首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使struct一次只存储一个变量?c++

如何使struct一次只存储一个变量?c++
EN

Stack Overflow用户
提问于 2017-01-06 17:37:57
回答 3查看 243关注 0票数 1

我明白,有了工会,所有的成员都有着相同的记忆。对于结构,它们不共享内存,因此将内存中的不同空间分配给结构的每个成员。

我的解决方案要求我创建一个结构,它只在存储在结构中的一个类型中存储值;表现得像一个联合。我不能使用联合的原因是因为指定的“类型”之一是字符串,并且您不能在联合中包含字符串变量。如何确保每次只有一个结构成员占用内存中的空间?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-06 17:43:22

如何确保每次只有一个结构成员占用内存中的空间?

如果编译器( std::any )支持,则可以使用std::variant或C++17,也可以使用模板类型。

代码语言:javascript
复制
template <typename T>
struct wrap
{
   T elem;
};
票数 0
EN

Stack Overflow用户

发布于 2017-01-06 17:47:24

您将需要一个缓冲区(大小为max(sizeof(T1), sizeof(T2), sizeof(T3)...))、新位置和一个枚举变量来记住当前缓冲区中的哪个对象。这被称为“有标签的联盟”。然后,您需要编写成员函数来安全地控制这个人工受精对象的生存期。最后,您需要花几天的时间来解决任何对齐需求。

但这正是boost::variant所做的很快也会是std::variant的。

票数 8
EN

Stack Overflow用户

发布于 2017-01-06 17:43:15

你不能。结构的大小总是一样的。创建结构时,编译器为结构中的每个成员变量预留空间,并将其定义为结构的大小。当您的代码要求内存管理器为结构分配内存时,无论是否使用所有变量,它总是分配相同的内存量。

您最好的选择是将字符串转换为可以在联合中使用的另一种类型,例如固定大小的字符数组。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41511172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档