`boost::any` 和 `std::any` 之间的区别
Posted
技术标签:
【中文标题】`boost::any` 和 `std::any` 之间的区别【英文标题】:Differences between `boost::any` and `std::any` 【发布时间】:2018-08-23 00:55:32 【问题描述】:C++17 引入了对象容器std::any
,基于boost 库boost::any
。
我的问题是:标准化的any
是否等同于boost版本,还是有区别?
similar question has been posted about variant
,在这种情况下存在一些差异,但我找不到关于 any
的参考资料。
编辑:我可以看到的一个区别是方法 emplace
的可用性。我对行为和保证之间的差异感兴趣的不仅仅是 API 的差异。例如,不同的分配对我来说很重要。
【问题讨论】:
如果内存分配和间接是一个问题,你根本不应该使用any
。
可能重复:***.com/questions/41878040/…
@MaximEgorushkin:他们不是问题,但我想知道在什么情况下会发生什么。
【参考方案1】:
我对行为和保证之间的差异感兴趣。
没有任何行为差异;并不真地。它们都对 ValueType 有相同的要求(可复制构造,以及不发出异常的析构函数)。它们都对存储的值提供相同的操作,并提供几乎相同的异常保证。
主要区别在于boost::any
的实现目前没有实现小对象优化,而std::any
的实现可能提供。
【讨论】:
感谢您的回答。 answer in the linked question 说 boost 从不应用小对象优化。这个答案是一年前的。与此同时,Boost 实施是否改变了我?boost::any
没有实现小对象优化。
感谢您编辑答案。你知道标准库是否实现了小对象优化?以上是关于`boost::any` 和 `std::any` 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
boost::ptr_vector 和 boost::any 的问题