如何使用variant代替union


如何使用variant代替union,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。union(联合体)和struct相似,也可以包含多个数据成员,但是不同的是同时只允许一个成员有效,因此经常作为作为节约空间的类使用。考虑下面的代码:上述代码首先声明了一个包含两个成员的联合体,然后分别为两个成员赋值。为了了解赋值之后每个成员的状态,在赋值之后又分别将两个成员的值输出,其结果如下:u1.i=100

u1.df=-9.25596e+61

u1.i=0

u1.df=122
从结果可以看到,为i赋值之后,i的值有效,而df无效;为df赋值之后,df值有效,而i无效。这件事本身符合union的定义,但问题是如果只是面对一个联合体的对象,用户没有办法知道那个成员的值是有效的。如果成员是指针或者对象,那么带来的类型风险会更大。一般的做法是自己实现一个类,另外设置一个管理类型的数据成员,问题是可以解决,但是代价也 香港云主机不小。
这个问题可以使用C++17中引入的variant来解决。直接看代码:代码首先构建了一个包含int和double成员的variant变量,它的名称为var,初值为double类型的122.0。这里variant会根据初始值的内容自动决定需要初始化那个成员。初值设定完成之后,可以使用variant提供的index方法获取当前有效的成员索引。接下来故意在double有效的情况下获取int成员的值,观察会发生什么。结果如下:可以看到获取double值的处理正常完成,而获取int值的处理抛出了异常。我们也可以尝试相反的情况:结果如下:这次是获取int成员成功,获取double成员时抛出异常。从这段说明不难看出,有了variant之后,一切都变得简单又安全。看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注开发云行业资讯频道,感谢您对开发云的支持。

相关推荐: C++中如何使用auto表示多维数组指针

C++中如何使用auto表示多维数组指针,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。多维数组的指针多维数组是一种常见的数据结构,实际上是数组的数组。这个含义虽然很好理解,但是在定…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/14 16:15
Next 08/14 16:15

相关推荐