将所有void函数转换为非void函数

时间:2016-11-28 14:15:19

标签: c++ function void

我认为,即使函数实际上没有返回任何内容,最好还是返回一个整数。 返回的值可用于反映函数内的各种错误条件。通过选择整数返回函数而不是" void"我们付出的代价是否有任何代价? C ++中的函数?

3 个答案:

答案 0 :(得分:9)

您将面临必须从每个函数返回值的计算开销。但是一个好的优化器可能会删除多余的返回值。

这是个坏主意,因为它会使你的代码无法读取。但另一个原因是一个坏主意:它为未定义的行为创造了另一种可能性进入程序的可能性。除了main之外,所有标记为int 的函数必须所有控制路径上返回int

为什么不使用异常机制;这是惯用的方式吗?

答案 1 :(得分:6)

如果您的设计策略每个函数都应该返回一个代码,告诉您它是否成功,那么更改void函数以返回这样的值是有意义的。您最终通过引用传递输出参数而不是返回值,并且您获得的代码看起来不像惯用的C ++。但是,如果它只是功能,否则什么都不返回,它只是一个任意的变化,会让人迷惑不解。

如果某个函数无法执行它应该执行的操作,则应抛出异常。

答案 2 :(得分:4)

是的,会有附加价格。我们正在为创建不太清晰且更容易出错的代码付出代价。

首先,返回原始int将是可怕的想法。如何区分int返回类型是实际整数的函数和int返回类型是错误代码的函数?

但即使您回复int大小,int - 类似ErrorCode类型,它仍然是一个坏主意。你现在掌握了很多功能,声称它们可能会导致错误。问题是,哪些错误可能?从理论上讲,每个呼叫站点都应该检查所有可能的错误,如果不处理它们然后传递它们。

在实践中,这将产生两种后果之一。要么是人们都遵循这一点,那么每一段功能代码都会被错误处理所淹没。

或者(更有可能)人们只是辞职并忽略返回的错误代码,可能还有// this cannot fail之类的评论。然而,这会给你一种虚假的安全感。在编写函数时,您可以安全地#34;返回错误代码并假设它将被处理。然而,来电者很可能会高兴地忽略它。

在C ++中,如果你想让调用者知道那里是一个错误,你应该使用内置错误机制:例外。调用者不能忽略这些错误。他们刻意的努力,并允许你编写只关心它有趣的错误的代码。