在if语句中使用逗号运算符
Using the comma operator in if statements
我尝试了以下操作:
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。(正如关于这个问题的一项评论所指出的那样)。
那么,有没有一种方法可以像for(int i=0;i<10;i++)
一样在if语句中初始化和使用变量呢?因此,您可以生成类似if((int i=6+4)==10)
(它不会编译)的东西,其中if范围内的I值为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.
用作初始值设定项表达式的表达式必须是赋值表达式,因此如果要使用逗号运算符,则必须将初始值设定值设定项用括号括起来。
例如(并不是说你尝试的有多大意义,因为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
语句之前声明变量,并使用要测试的表达式作为条件。
例如
int i;
if ((i = 6 + 4) == 10)
我严重怀疑中的任何一个例子是否能做任何有用的事情。它所做的只是以一种复杂的方式评估为"真"。
但第二个没有编译的原因是它被解释为两个声明:int i = 6+4; int i==10
和int i==10
无效,因为这是一个相等运算符,而不是赋值。
有不同的替代方案,因为您想要的无法完成(您不能将逗号运算符与声明混合使用)。例如,您可以在if
条件之外声明变量:
int i = 6+4;
if ( i == 10 ) ...
或者您可以将i
的值更改为0
而不是10
,并在else
块内重新计算i
:
if ( int i = (6+4)-10 ) ; else {
i += 10;
// ...
}
更简单的是,根本不声明变量,因为你知道循环中的值:
if ( (6+4)==10 ) {
int i = 10;
// ...
}
当然,除非在不是10
的情况下需要i
的值,在这种情况下,第二个选项是最合适的。
从C++17开始,您尝试做的事情终于有可能了:
if (int i=6+4; i==10)
cout << "works, and i is " << i << endl;
请注意使用;
而不是,
来分隔声明和实际条件。
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- -> if (C++) 中的运算符
- 三元运算符和 if constexpr
- 为什么程序会错过"if"运算符?
- 是否可以在C++中使用三元运算符在 if 语句中选择比较运算符?
- c++ 如何计算赋值运算符(if 语句)
- 带有逻辑 OR 运算符的 if 条件的缩写?
- 为什么使用 and 运算符比较 if 语句中的 2 个对象会抛出错误,而使用 2 if 语句则不会
- 令牌之前缺少二进制运算符 "#" 当 #define 在 #if 内时出错
- 为什么 if 语句对于运算符重载函数计算 false
- 使用 if (? 运算符) 语句传递带有指针的数组
- 我们可以在if语句中使用三元运算符
- 算子!() 和运算符 --() 在 if 条件下
- 如何修复"运算符不匹配=="比较if语句中的字符串时
- 如何像if语句一样使用三元运算符
- 用if-statement移动构造函数,但使用三元运算符复制构造函数
- 条件运算符vs if then else
- 在C++中使用位运算符还是if语句更快
- 比较运算符的类似数学的链接 - 如 "if ( (5<j<=1) )"
- 使用什么来代替if/else、switch或三元运算符