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

C++ 将所有void函数转换为非void函数,c++,function,void,C++,Function,Void,我认为,最好返回一个整数,即使函数实际上不返回任何内容。 返回的值可用于反映函数内部的各种错误情况。是否总是有代价,我们总是选择整数返回函数而不是C++中的“空虚”函数? ,你将不得不计算从每个函数返回值的计算开销。但是一个好的优化者可能会删除多余的返回值 这是个坏主意,因为它会使您的代码无法读取。但这是一个坏主意,还有另一个原因:它为未定义的行为创造了另一种可能,使其潜入到您的程序中。除了main,所有标记为int的函数必须在所有控制路径上返回int 为什么不使用异常机制;哪个是惯用的方法?如

我认为,最好返回一个整数,即使函数实际上不返回任何内容。
返回的值可用于反映函数内部的各种错误情况。是否总是有代价,我们总是选择整数返回函数而不是C++中的“空虚”函数?

,你将不得不计算从每个函数返回值的计算开销。但是一个好的优化者可能会删除多余的返回值

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


为什么不使用异常机制;哪个是惯用的方法?

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


如果一个函数不能做它应该做的事情,它应该抛出一个异常。

是的,会附加一个价格。我们将为创建不那么清晰、更容易出错的代码付出代价

首先,返回原始
int
将是一个糟糕的主意。如何区分返回类型为实际整数的函数和返回类型为错误代码的函数

但是,即使您重新使用
int
大小的
int
,比如
ErrorCode
类型,这仍然是一个坏主意。现在,您手中有许多函数声称它们可能导致错误。问题是,可能出现哪些错误?从理论上讲,每个呼叫站点都应该检查所有可能的错误,如果不处理这些错误,就将其传递下去

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

或者(更有可能)人们只是辞职并忽略返回的错误代码,可能带有类似于
//这不能失败
的注释。然而,这给了你一种虚假的安全感。在编写函数时,您“安全地”返回一个错误代码,并假定它将得到处理。然而,打电话的人很可能会很高兴地忽略它


在C++中,如果要让调用方知道有一个错误,则应该使用错误机制中的BUIL:异常。如果调用者没有经过深思熟虑,就不能忽略这些错误,并且允许您编写只关心它感兴趣的错误的代码。

是的,确实如此。这叫做可读性。我没有一个规范的答案,但这是一个糟糕的想法。如何区分“void”函数和返回
int
的函数之间的区别?这会使代码的可读性变得更差,并且违反了规则。在这里什么是否决票?这个想法可能是错误的,但这不是投票表明同意的meta。@Angew:我完全同意。请不要因为一个想法不好而否决它。@KarlNicoll这两个都是投票结束的绝佳理由。对于否决票,我不太确定(尽管每个人都可以随心所欲地投票)。