C/C++技巧 布尔型警告

在返回bool型变量时,但我们有时会返回int等非bool型变量,当然编译器会自动进行类型的转换,代码运行的结果也会返回我们所期望的结果,但就是在编译过时产生一个警告信息。当然少了我们可以忽略不计,但如果工程太大,这样的警告太多,和编译输出错误混在一起,很不利于我们代码的非错。
如有下代码:

// t.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

bool  IsTrue()
{
    int a = 1;
    return a;
}
int _tmain(int argc, _TCHAR* argv[])
{
    bool isok = IsTrue();
}

编译输出:

1>------ Build started: Project: t, Configuration: Debug Win32 ------
1>  t.cpp
1>c:usersadministratordesktopttt.cpp(9): warning C4800: 'int' :
forcing value to bool 'true' or 'false' (performance warning)
1>  t.vcxproj -> C:\Users\Administrator\Desktopt\Debugt.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

1转换成bool型为true,肯定没有问题,但在编译过程中输出的这个警告信息总是有点小的瑕疵。当然我们也可以用上节的方法进行警告屏蔽 ,但就为了这一个而这样弄,总是感觉有点大才小用。
那用什么办法了?
我们可以使用!!非非来进行强制转换,这种转换是无警告的。

#include "stdafx.h"

bool  IsTrue()
{
    int a = 1;
    return !!(a);
}
int _tmain(int argc, _TCHAR* argv[])
{
    bool isok = IsTrue();
}

如果为了方便,我们也可定义一个宏来进行转换:
如:

#define B(a) (!!(a))
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!