java – 为什么要弹出一个参数?
快速背景
我是一个 Java开发人员,在我的空闲/无聊的时间里一直在玩C. 前言 void pop(Item& removed); 我明白,用你删除的内容来填写参数是很好的.对我来说完全是有道理的.这样,要求删除顶级项目的人可以看看已删除的内容. 但是,如果我在Java中做到这一点,我会做这样的事情: Item pop() throws StackException; 这样,在弹出后,我们返回:NULL作为结果,将抛出一个Item或异常. 我的C教科书给我上面的例子,但是我看到很多堆栈实现没有参数(例如stl stack). 问题 奖金 解决方法
为了回答这个问题:你不应该在C中实现pop函数,因为它已经被STL实现了.
std::stack 容器适配器提供了方法顶部以获取对堆栈顶部元素的引用,并且该方法弹出以删除顶部元素.请注意,如您所询问的,单独的弹出方法不能用于执行这两个操作.
为什么要这样做? >异常安全:Herb Sutter在GotW #82发表了很好的解释. 希望获取元素副本的任何代码都可以免除额外的费用: Foo f(s.top()); s.pop(); 另外this discussion可能很有趣. 如果你要实现pop来返回值,则无论你是通过值返回还是将其写入out参数,都不重要.大多数编译器实现RVO,它将优化返回值方法与copy-out-out-parameter方法一样高效.请记住,这两者之一可能比使用top()或front()检查对象的效率更低,因为在这种情况下绝对没有复制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |