我应该在C++中使用"int"或"bool"作为返回值吗?

iht*_*wot 14 c++

如果我有一个执行某些过程的函数然后需要返回某事的真值,那么使用布尔变量或int变量作为返回类型是否有令人信服的理由?

bool Foo()
{
  ...
  ...
  return truthValue;
}

int Foo()
{
  ...
  ...
  return truthValue;
}
Run Code Online (Sandbox Code Playgroud)

这两个功能之间有明显的区别吗?这两者有哪些潜在的缺陷和优势?

谢谢,

NMR

RC.*_*RC. 28

如果它是一个真正的真值,那么你应该使用bool,因为它使调用者非常清楚将返回什么.返回int时,可以将其视为代码/枚举类型值.

代码应尽可能清晰明确,无论是函数名称,参数名称和类型,还是返回代码的类型.这提供了更多自我记录的代码,更易于维护的代码,以及有人会误解您"意味着什么"的可能性更低.


pax*_*blo 6

如果要返回二进制真值,则应使用布尔数据类型(如果可用).

编译器会在必要时对事物进行优化,您应该尽可能地编写代码以便清楚.这样,您或您的继任者将毫无疑问地在轨道上走了五年.


Ada*_*eld 5

使用bool- 它更清楚地传达了代码的语义含义.如果另一个开发人员读取您的代码并看到返回类型bool,他立即知道它返回一个真值.相反,如果他看到它返回一个int,他必须进一步挖掘并花更多时间找出函数的界面(例如阅读文档或阅读代码),这会减慢他的速度.

使用的唯一原因int是,如果您需要与遗留代码接口和/或符合特定接口(例如,您的函数获取其地址并传递给需要某个原型功能的第三方库).


Bil*_*ter 5

现有答案中没有足够强调的一件事:一定要使用bool,但是要获得最大的收益,您只需为bool变量和函数使用好名字。我之所以这样说是因为trueValue是一个典型的可怕名称。您的布尔名称应始终使您使用的约定显而易见。不要让其他编码人员猜测bool变量的工作方式。所以;

好名字

bool okay;
bool error;
bool success;
bool IsWidget();
Run Code Online (Sandbox Code Playgroud)

坏名字

bool truthValue;
bool status;
bool result;
bool Widget();
Run Code Online (Sandbox Code Playgroud)

你看到区别了吗?诚然,您的trueValue可以说比状态或结果更好。但是基本上,这些坏名字使代码变得混乱。

// Bad
bool result = Func();
if( result )
{
   // Did Func() succeed or fail ? who knows
}

// Good
bool okay = Func();
if( okay )
{
   // Func() succeeded
}
Run Code Online (Sandbox Code Playgroud)