方法的编码约定在C++中返回

Vis*_*ddi 5 c c++ conventions naming-conventions

我观察到成功完成方法预期功能的一般编码约定是0.(如exit(0)所示).

这种混淆我是因为,如果我在if语句中使用方法并且方法返回0,则"if condition"为false,从而敦促我思考该方法失败了一分钟.当然我知道我必须附加一个"!" (如在if(!Method())中,但是这种常规本身是不是自相矛盾?

GMa*_*ckG 16

您需要区分错误代码和错误标志.代码是表示任意数量错误的数字,而标志是表示成功的布尔值.

说到错误代码,我们的想法是:只有一种方法可以成功,但有许多方法可以失败.将0作为一个好的单一唯一编号,代表成功,然后你有其他所有数字是一种表示失败的方式.(任何其他方式都没有意义.)

当谈到错误标志时,这个想法很简单:True表示它有效,false表示它没有.然后,您通常可以通过其他方式获取错误代码,并采取相应措施.

某些函数使用错误代码,有些使用错误标记.没有什么令人困惑或倒退的事情,除非你试图将一切都视为旗帜.并非所有的返回值都是一个标志,这只是你必须习惯的东西.

请记住,在C++中,您通常会处理异常错误.您只需从捕获的异常中获取必要的信息,而不是查找错误代码.


Ste*_*sop 3

该约定并不矛盾本身,它与您对该功能的期望使用相矛盾。

其中之一必须改变,而且这不会成为惯例;-)

我通常会写:

if (Function() == 0) {
    // code for success
} else {
    // code for failure
}
Run Code Online (Sandbox Code Playgroud)

或者if (Function() != 0)相反的情况。

整数可以隐式转换为布尔值,但这并不意味着您总是应该这样做。0这里是指0,不是指false。如果你真的愿意,你可以这样写:

int error = Function();
if (!error) {
    // code for success
} else {
    // code for failure, perhaps using error value
}
Run Code Online (Sandbox Code Playgroud)