小弟初学c++,在教程里(谭浩强编的c++)看到一个问题十分困惑,请高手指教,谢谢!
以下是教程里的原文:
“例如,若变量i的值为3,有以下函数调用:
fun(i,++i);
如果按自左至右的顺序求实参的值,则函数调用相当于fun(3,4),若按自右至左的顺序求实参的值,则相当于fun(3,3)。许多c++系统(例如Visual C++和GCC)是按自右至左的顺序求值的。”
为什么按自右至左的顺序求值就是fun(3,3)呢,能不能写个代码体现一下?
小弟初学c++,在教程里(谭浩强编的c++)看到一个问题十分困惑,请高手指教,谢谢!
以下是教程里的原文:
“例如,若变量i的值为3,有以下函数调用:
fun(i,++i);
如果按自左至右的顺序求实参的值,则函数调用相当于fun(3,4),若按自右至左的顺序求实参的值,则相当于fun(3,3)。许多c++系统(例如Visual C++和GCC)是按自右至左的顺序求值的。”
为什么按自右至左的顺序求值就是fun(3,3)呢,能不能写个代码体现一下?
这不是自右向左的顺序问题,这是个,(逗号)运算法则。
比如(a,b)a,b分别为表达式,先计算a,然后运算结果暂存,再运算b,整个表达式的结果由b决定。
所以
void f(int i,int j){
cout << i << "\t" << j << endl;
}
int a = 3;
f(a,++a);
输出结果为 4,4。
这本书
VC++6.0 :
#include<iostream>
using namespace std;
int f(int i,int j)
{
cout<<i<<" "<<j<<endl;
return 0;
}
int main()
{
int i=3,j=3;
// f(i,++i); //输出 4 4
f(i,i++); //输出 3 3
system("pause");
return 0;
}
DEV C++ :
#include<iostream>
using namespace std;
int f(int i,int j)
{
cout<<i<<" "<<j<<endl;
return 0;
}
int main()
{
int i=3,j=3;
f(i,++i); //输出 4 4
// f(i,i++); //输出 4 3
system("pause");
return 0;
}
VC 和 GCC的法则不一样吧
[此贴子已经被作者于2007-4-19 18:29:20编辑过]
应该和编译器的执行顺序有关了
fun(i,++i); //从左到右 肯定是 fun(3,4)了 而从右到左是fun(4,4) 不应该有fun(3,3)的情况发生吧
同上
与平台有关
不过,想知道规定的是什么样
用DEV测试
但是最好别写这些'小聪明'的程序