我习惯于旧式编程,函数返回0表示成功,非零表示错误,并且可以很容易地用
if ( ! myobject.mymethod() ) {
handle error
}因此,我暂时使用C++17 (尽管我可以向前或向后移动),并选择使大量方法返回枚举。
所以现在编译器抱怨没有!操作符。当然可以。,但避免输入人员的标准实践是什么:
if ( myobject.mymethod() != ReturnCode::Success ) {
handle error
}我认为,这会增加代码的读写难度,增加总拥有成本(TCO)?
只是一些我在考虑的事情:
operator!(bool)。但我不记得在其他代码中见过这种情况。的含义。
发布于 2022-10-08 09:46:07
如果您使用简单枚举,使用0作为成功,那么您可以编写如下代码:
if(!functionCall())
error handling或者你可以读到std::error_code,它有bool操作符
发布于 2022-10-08 10:40:28
我会说
if ( myobject.mymethod() != ReturnCode::Success ) {
handle error
}更清晰、更不容易出错。
if ( ! myobject.mymethod() ) {
handle error
}在前者中,从阅读这段代码可以清楚地看到,该块正在处理不成功的情况。
在后一种情况下,您不知道块是处理成功还是错误还是其他什么,程序员很容易混淆这一点。
实际上,您自己证明了这一点,您可以编写返回0(false)是成功的,但是您的代码将其视为失败。
所以不要害怕更冗长的代码,因为这样可以帮助您避免这样的错误。
发布于 2022-10-08 10:16:30
将enum class更改为enum以允许自动(隐式)转换为整数,这反过来可以用作布尔值,而无需进一步工作。
非作用域枚举类型的值是隐式可转换为整数类型的。
这种非作用域枚举类型是通过使用enum定义枚举得到的。
相反,我是通过使用enum class定义枚举来使用作用域枚举时间的。
https://stackoverflow.com/questions/73995855
复制相似问题