c++问题,不会不要瞎答谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/14 18:29:26
#include <iostream.h>
int print(int i){cout<<" a "<<endl;return i*i;}
double print(double d) {cout<<" b "<<endl;return 2*d;}
void main()
{
int a=25;
float b=9.2;
double d=3.3;
long l=9;
cout<<print(a)<<endl<<print(b)<<endl<<print(d)<<endl<<print(l)<<endl;
}
输出:
a
b
b
a
25
9.2
3.3
为什么是这个样子?
如果改成这样
cout<<print(a)<<endl;
cout<<print(b)<<endl;
cout<<print(d)<<endl;
cout<<print(l)<<endl;
输出:
a
25
b
9.2
b
3.3
a
25
这是什么原因?我的编译器有问题?
还有为什么 print(l) 用的是 int print(int i) 这个函数?是那种匹配?为什么这该种匹配呢? 标准转换匹配是什么原则转换的?
问题多了点不过都不是很麻烦,在这先谢谢了
输出答案数我打错了,谢谢指正,那不是主要问题,楼下的几位谁也没说标准转换匹配是怎么回事啊,并且print(l)是那种匹配,为什么是这种匹配也没说啊,分提高了噢
五楼地,我知道他们说的对,可是没我有想知道地,就是熟话说的答非所问,你自己也弄明白点好不,我知道那叫重载,重载时计算机不

你自己的答案错了因为两个反回值分别是return i*i; 和return 2*d;
除非你把他改成return i;和return d;
上面的调用其实是因为int 和long类型几乎一样,就是可以输出的字的长度多点好小点,而double和float也是和上面差不多的,所以调用时他们调用的都是相同的,如果cout<<print(a)<<endl<<print(b)<<endl<<print(d)<<endl<<print(l)<<endl;把他们写在一块就会出现每个函数先调用,接着运行
cout<<返回的值<<endl<<返回的值<<endl<<返回的值<<endl<<返回的值<<endl;
所以出现上面的答案,而用
cout<<print(a)<<endl;
cout<<print(b)<<endl;
cout<<print(d)<<endl;
cout<<print(l)<<endl;
把他们分开了就会第一个调用回来再直接输出,导致一个字母一个答案

首先,你自己把答案弄错了,正确答案是:
a
b
b
a
625
18.4
6.6
81

a
625
b
18.4
b
6.6
a
81

第一个输出语句,系统首先扫描整个表达式,先执行print(a),print(b)、print(d)和print(l)等,然后执行cout。
第二个及以后的输出语句则不同了,它是每个cout执行完后,再执行下一个cout语句。而在执行每个cout语句时,顺序和
上面的一样,所以就出现了上面的答案。

和输出拼接没有关