一道C++程序

来源:百度知道 编辑:UC知道 时间:2024/07/01 06:06:31
#include<iostream.h>
#define N 6
void fun()
{
static int a;
int b=2;
cout<<(a+=6,a+b)<<",";
}
void main()
{
for(int i=1;i<N;i++)
fun();
cout<<endl;
}

为什么结果是 8,14,20,26,32
而不是 8,16,24,32,40

因为a申明的是static型,静态的,函数运行时a的值会得到保留,b会重新赋值=2,当函数运行一次,(a+=6,a+b)=(6,8),逗号运算符取后面的数结果就是8,在运行时,a=6,(a+=6,a
+b)=(12,14),结果取14,如此,下次运行时,a=12,(a+=6,a+b)=(18,20)于是运行结果为8,14,20,26,32

(a+=6,a+b)
逗号运算符只做前面的

而且 a+b又不是a=a+b,所以没用
就算a=a+b了也是一样,因为逗号运算符只做前面的

输出的是(a+=6,a+b)这个表达式的值,这个表达式中有个逗号运算符,结果就是相当于取了a+=6的值,即a+6的值

该编译器是从左到右
cout<<(a+=6,a+b)<<",";
等价于
a += 6;
cout<<a+b<<",";