#include <iostream>
using namespace std;
int main()
{
int x=3;
if((int y=x)!=4)
cout<<y<<endl;
return 0;
}
if条件句为什么不能先初始化一个变量再判断?
我只是想把x赋给y,然后再确定y是不是等于4,
如果按你的说法就改变了我的原意了。
1303: if ( int b = 3 )
00DE276E mov dword ptr [b],3 // 将3赋值给b
00DE2775 cmp dword ptr [b],0 // 将b与0进行比较
00DE2779 je main+5Bh (0DE27ABh)
1304: {
上面是一段反汇编的代码,个人感觉(int b = 3) != 4 这样也能说通,但是这个不能通过编译,也就是语法上强制要求,有可能是 != 符号的问题,如果是先
int b;
再
(b = 3) != 4; 这句是能通过的,也就是说,!= 的左右是可以有赋值语句的(这个估计大家也用得不少了),但是 int b = 3;这是一个声明语句,而声明的同时给赋予了初始值而已,但始终还是一个声明语句,换个角度想,如果声明语句可以作为 != 的左右值,那么就有可能会出现(int b) != 4; 或者 4 != (int b);而这样的情况,估计就很诡异了吧。
上面就是我自己的一些猜测和想法,没有任何书面依据,希望知情人士可以指点。
你是说判断里的是声明?
追答int y就是变量声明
追问这种写法也挺好的,为什么编译器要屏蔽掉呢,有没有解释这个的出处?
追答怎么好了?
有什么意义吗?
能增强可读性吗?
既然不能添加这种无意义的编译解析干嘛?就跟现在人再造字似得!
最新回复的yeswd_skyping
他提到的你可以看一看
对,我说的是不太对
因为声明/定义是语句不是表达式,所以不能作为表达式的一部分,没记错的话C++是允许
if(int y=x)这样在if的条件中初始化的语法的,这是C++允许随处初始化的一个看似奇葩的例子……