主题:有点看不明白
ericwn
[专家分:0] 发布于 2008-08-03 23:12:00
#include<iostream.h>
main()
{int a;
int x,y;
cout<<((a==0?x=1:y=5)=3);
}
这里的a没有被赋值啊,如何判断a==0
我是自学c++,绝对的菜,望大家不要笑话
回复列表 (共4个回复)
沙发
liuluning [专家分:3340] 发布于 2008-08-04 10:27:00
其实你说的是对的。a只有在定义为全局变量时才会自动初始化为零,在函数内部定义时不进行初始化,因此a的值是不定的,无法判断a==0。
不过,这个表达式输出的结果跟a的值其实没有关系,表达式的结果总是3。可以试一下:
#include <iostream>
using namespace std;
int main()
{
int a=2;//不妨赋个初值试试
int x,y;
cout<<((a==0?x=1:y=5)=3);
return 0;
}
自学怎么啦,自学不必别人差,相反更需要智慧和勇气,更了不起,值得敬佩!顶你一个!
板凳
s110 [专家分:1060] 发布于 2008-08-04 11:46:00
虽然 cout的结果都是 3
但是,x,y的值是不一样的!
如果a==0 那么语句成为:
cout<< (x=1) =3;
最后 x值为 3
如果a!=0 那么语句成为:
cout<< (y=5) =3;
最后 y值为 3
3 楼
s110 [专家分:1060] 发布于 2008-08-04 11:48:00
LZ,这个问题提得蛮好的,可惜不能给你分,要不你这个问题我给你打50分!
从这个问题得到的结论出发,我们就可以利用这个奇妙的特点做些奇妙的事情,呵呵.
4 楼
小小C [专家分:4570] 发布于 2008-08-04 13:08:00
在VC7下,runtime会阻止这种用法
我来回复