首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中,将失败代码作为枚举返回似乎会使代码冗长

在C++中,将失败代码作为枚举返回似乎会使代码冗长
EN

Stack Overflow用户
提问于 2022-10-08 09:29:09
回答 3查看 55关注 0票数 -2

我习惯于旧式编程,函数返回0表示成功,非零表示错误,并且可以很容易地用

代码语言:javascript
复制
if ( ! myobject.mymethod() ) {
    handle error
}

因此,我暂时使用C++17 (尽管我可以向前或向后移动),并选择使大量方法返回枚举。

所以现在编译器抱怨没有!操作符。当然可以。,但避免输入人员的标准实践是什么:

代码语言:javascript
复制
if ( myobject.mymethod() != ReturnCode::Success ) {
    handle error
}

我认为,这会增加代码的读写难度,增加总拥有成本(TCO)?

只是一些我在考虑的事情:

  1. 为我在职业生涯中所写的所有这类文章定义了一个operator!(bool)。但我不记得在其他代码中见过这种情况。

  1. 使用int的预处理器定义,并返回这些定义(尽管在调试器中无法理解错误5是有代价的,并且必须搜索头部以查看

的含义。

  1. 异常对于我的需求来说太大了,尽管我认为
EN

回答 3

Stack Overflow用户

发布于 2022-10-08 09:46:07

如果您使用简单枚举,使用0作为成功,那么您可以编写如下代码:

代码语言:javascript
复制
if(!functionCall())
   error handling

或者你可以读到std::error_code,它有bool操作符

票数 1
EN

Stack Overflow用户

发布于 2022-10-08 10:40:28

我会说

代码语言:javascript
复制
if ( myobject.mymethod() != ReturnCode::Success ) {
    handle error
}

更清晰、更不容易出错。

代码语言:javascript
复制
if ( ! myobject.mymethod() ) {
    handle error
}

在前者中,从阅读这段代码可以清楚地看到,该块正在处理不成功的情况。

在后一种情况下,您不知道块是处理成功还是错误还是其他什么,程序员很容易混淆这一点。

实际上,您自己证明了这一点,您可以编写返回0(false)是成功的,但是您的代码将其视为失败。

所以不要害怕更冗长的代码,因为这样可以帮助您避免这样的错误。

票数 1
EN

Stack Overflow用户

发布于 2022-10-08 10:16:30

enum class更改为enum以允许自动(隐式)转换为整数,这反过来可以用作布尔值,而无需进一步工作。

非作用域枚举类型的值是隐式可转换为整数类型的。

这种非作用域枚举类型是通过使用enum定义枚举得到的。

相反,我是通过使用enum class定义枚举来使用作用域枚举时间的。

https://en.cppreference.com/w/cpp/language/enum

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73995855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档