在if语句
我尝试了后续的使用逗号操作:在if语句
if(int i=6+4==10)
cout << "works!" << i;
if(int i=6+4,i==10)
cout << "doesn't even compile" << i;
精细的首部作品,而第二个不能编译。为什么是这样?
编辑:现在我知道,第一个可能无法正常工作,因为我打算。 if范围内的i的值将是1,而不是10.(正如在这个问题上的一个评论所指出的那样)。
那么有没有办法在if语句中同时初始化和使用一个变量,类似于for(int i=0;i<10;i++)
?所以你可以产生类似于if((int i=6+4)==10)
(它不会编译)的地方,其中if范围内的值是10? 我知道你可以在if语句之前声明和初始化I,但是在声明本身中有没有办法做到这一点?
给你一个想法,为什么我认为这将是有用的。
if(int v1=someObject1.getValue(), int v2=someObject2.getValue(), v1!=v2)
{
//v1 and v2 are visible in this scope
//and can be used for further calculation without the need to call
//someObject1.getValue() und someObject2.getValue() again.
}
//if v1==v2 there is nothing to be done which is why v1 und v2
//only need to be visible in the scope of the if.
用作初始值设定项表达式的表达式必须是赋值表达式,所以如果要使用逗号运算符,则必须将初始化项加括号。
E.g. (不是说你正试图使作为6 + 4
有没有副作用太大意义和价值被丢弃,i == 10
使用的i
在自己的初始化未初始化值)。
if (int i = (6 + 4, i == 10)) // behaviour is undefined
你真的是这样呢?
int i = 6 + 4;
if (i == 10)
当使用if
声明一个新的变量的状态检查是始终转换为bool
初始化变量的值的形式。如果您希望条件成为涉及新变量的表达式,则必须在if
语句前声明该变量,并使用要测试的表达式作为条件。
E.g.
int i;
if ((i = 6 + 4) == 10)
这与问题有所不同,它也是未定义的(在比较之前'i'的值是未定义的。 – 2012-07-21 12:45:20
我不明白你的'if'语句 - 你将'i'分配给' bool',并在初始化前比较'i',这有什么意义,它与OP不一样 – David 2012-07-21 12:46:34
这有UB,不是吗? – 2012-07-21 12:50:32
我严重怀疑两个例子工作做任何有用的东西。它所做的只是在复杂的时尚中评估为“真实”。
但是第二个不编译的原因是它被解释为两个声明:int i = 6+4; int i==10
和int i==10
无效,因为这是一个等于运算符,而不是赋值。
有不同的选择,因为你想不能做什么(你不能混用声明逗号运算符)。你可以,例如,声明的if
条件的变量外:
int i = 6+4;
if (i == 10) ...
或者你可以改变的i
值是0
代替10
并重新计算i
的else
块内:
if (int i = (6+4)-10) ; else {
i += 10;
// ...
}
简单得多,根本不要声明变量,因为你知道循环内的值:
if ((6+4)==10) {
int i = 10;
// ...
}
除非当你不需要i
的值时,它不是10
,在这种情况下,第二个选项是最合适的。
由于C++ 17你试图做is finally possible:
if (int i=6+4; i==10)
cout << "works, and i is " << i << endl;
注意使用;
代替,
的的声明和实际情况分开。
你为什么想这样做?任何具体要求? – Nawaz 2012-07-21 12:38:38
你使用什么编译器?他们都不应该编译...编辑:语句收回。 – quasiverse 2012-07-21 12:38:42
我猜你不知道逗号操作符实际上做了什么。你想达到什么目的? – tenfour 2012-07-21 12:39:24