`boost::any`和`std::any`之间的区别

13
C++17 引入了基于 boost 库 boost::any 的对象容器std::any。 我的问题是:标准化的 any 是否等同于 boost 版本,还是存在差异?
一个类似的问题已经发布关于variant,在那种情况下有一些区别,但我找不到关于any的参考资料。

编辑:我能看到一个差异是方法emplace的可用性。我更关心行为和保证之间的差异。例如,不同的分配对我来说很重要。


如果内存分配和间接引用是问题,你根本不应该使用 any - Maxim Egorushkin
可能重复:https://dev59.com/SFgR5IYBdhLWcg3wAJP7 - NathanOliver
@MaximEgorushkin:它们不是问题,但我想知道在什么情况下会发生什么。 - Spiros
1个回答

6
我对行为和保证之间的差异很感兴趣。 实际上它们没有任何行为上的区别。它们都对ValueType有相同的要求(可复制构造,不能抛出异常的析构函数)。它们都提供了存储值的相同操作,并且具有基本相同的异常保证。 原则上的区别在于,boost::any目前的实现不支持小对象优化,而std::any的实现可能提供它。

感谢您的回答。一个链接问题中的答案(https://dev59.com/SFgR5IYBdhLWcg3wAJP7#41887519)说boost从不应用小对象优化。那个答案已经有一年了。在此期间,boost实现是否有所改变? - Spiros
boost::any 没有实现小对象优化。 - Andrey Semashev
感谢您编辑答案。您知道标准库是否实现了小对象优化吗? - Spiros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接