请教一个函数的问题?

shengyuan5278 2006-04-04 09:34:48
#include <iostream.h>
int fun(int x,int y)
{ return x*y;}
void main()
{ int k=5;
cout<<fun(k++, ++k)<<endl;
}
为什么输出为:36?如果这样cout<<fun(++k, k++)<<endl;则为37,能帮我分析一下吗?
...全文
216 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChenSu2008 2006-04-04
  • 打赏
  • 举报
回复
vc6.0 这个函数参数的顺序也可以从这个例子里清楚的看出来

#include <iostream.h>

class Base {
public:
Base() {
cout<<"construct Base instance"<<endl;
}
Base(Base& b) {
cout<<"copy Base instance"<<endl;
}
~Base() {
cout<<"destroy Base instance"<<endl;
}
};

class Derived:public Base {
public:
Derived() {
cout<<"construct Derived instance"<<endl;
}
Derived(Derived& d) {
cout<<"copy Derived instance"<<endl;
}
~Derived() {
cout<<"destroy Derived instance"<<endl;
}
};

void func(Base a, Derived d) {

}

void main()
{
Base b;
Derived d;

cout<<"call the function"<<endl;
func(b, d);
cout<<"end the function"<<endl;
}
lengxiao_wang 2006-04-04
  • 打赏
  • 举报
回复
语法糖,应该避免这样写,在vc6和vc7中,我追踪过类似的问题,发觉俩个编译器对此有不同的实现!
thinkingli 2006-04-04
  • 打赏
  • 举报
回复
ls正解,编译器是从右向左读取参数的。
iamcaicainiao 2006-04-04
  • 打赏
  • 举报
回复
这个跟编译器有关。不同编译器可能不同结果
cunsh 2006-04-04
  • 打赏
  • 举报
回复

参数的计算顺序没有规定.楼主不要这么写呀?
cwowlonglong 2006-04-04
  • 打赏
  • 举报
回复
不明白,学习
ChenSu2008 2006-04-04
  • 打赏
  • 举报
回复
执行完这个表达式的时候,k变成了6
fun(k++, ++k)

执行完这个表达式的时候,k变成了7
cout<<fun(k++, ++k)<<endl;

fun(k++, ++k)和这个fun(k, ++k)在函数中的效果一样
cout<<fun(++k, k++)<<endl;我得到是30,VC6.0

函数里的参数应该是从右往左的顺序计算的
逸学堂 2006-04-04
  • 打赏
  • 举报
回复
编译相关,首先先确定默认函数调用约定。
理解上面的最好方法是,查看反汇编。
zhuying1983 2006-04-04
  • 打赏
  • 举报
回复
c++中参数是从右往左读,++k返回6,k变成6,接着k++返回6,k变成7,6*6 = 36
bonseedd 2006-04-04
  • 打赏
  • 举报
回复
应该是30

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧