1.
当表达式需要一个算术值时 布尔对象(如 found)和布尔文字都被隐式地提升成 int(正 如下面的例子) false 变成 0 而 true变成 1 例如
bool found = false;
int occurrence_count = 0;
while ( /* 条件省略 */ )
{
found = look_for( /* 内容省略 */ );
// found 的值被提升为 0 或者 1
occurrence_count += found;
}
2.
正如文字false 和 true能自动转换成整数值 0 和 1 一样 如果有必要 算术值和指针值也 能隐式地被转换成布尔类型的值 0或空指针被转换成 false 所有其他的值都被转换成 true 例如
// 返回出现次数
extern int find( const string& );
bool found = false;
if ( found = find( "rosebud" ))
// ok: found == true
// 如找到返回该项的指针
extern int* find( int value );
if ( found = find( 1024 ))
// ok: found == true
布尔类型对象可以被赋予文字值true或者false,所对应的关系就是真与假的概念。
我们通常使用的方法是利用他来判断条件的真与假,例如下面的代码:
#include <iostream>
using namespace std;
void main(void)
{
bool found = true;
if (found)
{
cout << "found条件为真!" << endl;
}
}
但是一些概念不清的人却不知道布尔类型的对象也可以被看做是一种整数类型的对象,但是它不能被声明成signed,unsigned,short long,如果你生成(short bool found=false;),那么将会导致编译错误。
其为整数类型的概念是这样的:
当表达式需要一个算术值的时候,布尔类型对象将被隐式的转换成int类型也就是整形对象, false就是0,true就是1,请看下面的代码!
#include <iostream>
#include <string>
using namespace std;
void main(void)
{
bool found = true;
int a = 1;
cout << a + found << endl;
cin.get();
}
a+found 这样的表达式是成立的,输出后的值为2进行了加法运算!
那么说到这里很多人会问指针也可以吗?回答是肯定的这样一个概念对于指针同样也是有效的,下面我们来看一个将整形指针对象当作布尔对象进行使用的例子:
#include <iostream>
using namespace std;
void main(void)
{
int a = 1;
int *pi;
pi=&a;
if (*pi)
{
cout << "*pi为真" << endl;
}
cin.get();
}
上面代码中的*pi进行了隐式样的布尔类型转换表示为了真也就是true。