C++问题,急!!!!!!!!!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/26 02:22:32
请先看以下函数:
bool Greater(int a, int b)
{
if(a>b)
return true;
}
为什么调用的时候用cout<<Greater( a, b),都是输出1,
而如果用
c=Greater( a, b);
cout<<c,
若a<b则输出的是数a?
重点是下面啊!是c那里

bool值在C++里面翻译为整数的时候,true翻译为非0值,false翻译为0。至于为什么是1,是编译器对true的默认整数值,因为这样默认遵从了二进制里面1表示真0表示假的习惯。你的Greater函数有错。只有当你传进的实参a>b的时候才有返回值true,输入的时候被编译器翻译为1。一旦你输入的a<b,if条件不满足,没有返回值,编译器就随机地也可能是故意地(这就要问编译器的作者们了)将你传入的第一个参数返回出来了。你把Greater改成下面这样就可以了:
bool Greater(int a, int b)
{
return (a > b);
}

楼主,你不要去钻这种牛角尖。我上面已经给你解释得很清楚了。如果你非要打破沙锅问到底的话,我也只能这样跟你说。用
cout << Greater(a, b)输出都是1,
而用c = Greater(a, b); cout << c;若a < b则输出的是数a,
问题就在你的赋值语句c = Greater(a, b);身上。
由于cout << Greater(a, b),没有将Greater(a, b)的返回值赋给任何一个变量,这种情形编译器会认为你忽略掉Greater(a, b)的返回值或者说认为Greater(a, b)的返回值没用。由于,当a < b时,Greater(a, b)根本没有值返回(原因我已经在上面解释了),所以这个时候编译器不知道该输出什么值,就“随意”(究竟是不是随意的,你就得问编译器及其开发者了)或者干脆把if的return true;这唯一的一条返回语句就当成整个函数的返回语句,不管if是否成立都执行,所以你看到的就只有1。

而用c = Greater(a, b); cout << c;由于你现在有一条赋值语句,所以编译器便知道Greater(a, b);的返回值你是非用不可的,在a < b的情形下,它就绝对不能再把if条件对应的值返回出来,因为赋值语句关系到变量的状态,它至少返回的值与if条件成立时返回的值要有所区别才行,但是它又没有找到指定的值返回,就只能把传入的某一个参数返