java – 为什么要弹出一个参数?

前端之家收集整理的这篇文章主要介绍了java – 为什么要弹出一个参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
快速背景
我是一个 Java开发人员,在我的空闲/无聊的时间里一直在玩C.

前言
在C中,你经常会看到pop参考的参数:

void pop(Item& removed);

我明白,用你删除内容来填写参数是很好的.对我来说完全是有道理的.这样,要求删除顶级项目的人可以看看已删除内容.

但是,如果我在Java中做到这一点,我会做这样的事情:

Item pop() throws StackException;

这样,在弹出后,我们返回:NULL作为结果,将抛出一个Item或异常.

我的C教科书给我上面的例子,但是我看到很多堆栈实现没有参数(例如stl stack).

问题
C应该怎么实现pop函数

奖金
为什么?

解决方法

为了回答这个问题:你不应该在C中实现pop函数,因为它已经被STL实现了. std::stack容器适配器提供了方法顶部以获取对堆栈顶部元素的引用,并且该方法弹出以删除顶部元素.请注意,如您所询问的,单独的弹出方法不能用于执行这两个操作.

为什么要这样做?

>异常安全:Herb Sutter在GotW #82发表了很好的解释.
>单一责任原则:也在GotW#82中提到.顶部照顾一个责任,流行音乐照顾另一个责任.
>不要支付你不需要的费用:对于一些代码,可以检查顶部元素然后弹出它,而不用复制元素(可能是昂贵的). (这在SGI STL文档中提到.)

希望获取元素副本的任何代码都可以免除额外的费用:

Foo f(s.top());
s.pop();

另外this discussion可能很有趣.

如果你要实现pop来返回值,则无论你是通过值返回还是将其写入out参数,都不重要.大多数编译器实现RVO,它将优化返回值方法与copy-out-out-parameter方法一样高效.请记住,这两者之一可能比使用top()或front()检查对象的效率更低,因为在这种情况下绝对没有复制.

原文链接:https://www.f2er.com/java/122193.html

猜你在找的Java相关文章