C/C++技巧 布尔型警告
2023-06-06
13
0
在返回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))