三元运算符的返回类型是如何确定的?

我正在棋盘上解决一个关于毕晓普的问题在我的代码中,我包含了以下行: Std:: cout <<(abs (c2-c1) = = abs (r2-r1))?1: 2 <<std:: endl; 这将产生以下错误: 错误: “int” 和 “” 类型到二进制 “运算符 <” 的无效运算数 然而,我通过在代码中包含一个额外的变量来即时修复了这个错误: Int steps = (abs (c2-c1) = = abs (r2-r1)?1: 2; Std:: cout <步骤 <std:: endl; 现在,我脑子里有一个问题,三元运算符是如何工作的,它的返回类型是如何确定的 (编译器称之为)。 ……

共5个回答,已解决, 标签: c++ language-lawyer ternary-operator
语句 "int val = (+ + i > + + j)" 是否?+ i: + + j; ' 调用未定义的行为?

给出了以下程序: #include int main(void) { int i = 1, j = 2; int val = (++i > ++j) ? ++i : ++j; printf("%d\n", val); // prints 4 return 0; } 初始化似乎 val 隐藏了一些未定义的行为, 但我没有看到任何一点对象被多次修改或修改和使用, 而不需要中间的序列点。有人能纠正我, 或者证实我吗? ……

共4个回答,已解决, 标签: c ternary-operator sequence-points
如何将此语句转换为三元语句?

我试图把一个简单的 if/else 语句变成一个三元语句来练习,但是我遇到了麻烦。据我所知,逻辑是: 条件?(如果条件为 true,则采取行动): (如果为 false,则采取行动); 我的情况是if(result == 8)。 我已经试过了: 结果 = = 8?返回 true: 返回 false; 和 结果 = 8?返回 true: 返回 false; 这是我的代码,我想转换它的末尾 公共布尔 sum28 (int [] nums) { Int 结果 = 0; 对于 (int i = 0; i ` 我得到了一个类型不匹配: 当我只使用 1 个等号,并且在使用两个等号时得到一个无效的令牌 “= =” 时,不能从 int 转换为 ` ……

共3个回答,已解决, 标签: java ternary-operator conditional-operator