回 帖 发 新 帖 刷新版面

主题:有点看不明白

#include<iostream.h>
main()
{int a;
int x,y;
cout<<((a==0?x=1:y=5)=3);
}

这里的a没有被赋值啊,如何判断a==0



我是自学c++,绝对的菜,望大家不要笑话

回复列表 (共4个回复)

沙发

其实你说的是对的。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;
}
自学怎么啦,自学不必别人差,相反更需要智慧和勇气,更了不起,值得敬佩!顶你一个!

板凳

虽然 cout的结果都是 3
但是,x,y的值是不一样的!

如果a==0 那么语句成为:
cout<< (x=1) =3;
最后 x值为 3

如果a!=0 那么语句成为:
cout<< (y=5) =3;

最后 y值为 3

3 楼

LZ,这个问题提得蛮好的,可惜不能给你分,要不你这个问题我给你打50分!

从这个问题得到的结论出发,我们就可以利用这个奇妙的特点做些奇妙的事情,呵呵.

4 楼

在VC7下,runtime会阻止这种用法

我来回复

您尚未登录,请登录后再回复。点此登录或注册