识别C++代码问题
Identifying C++ code problems
这是什么意思?
我无法理解这一点,因为我没有使用这种格式。
任何人都可以翻译这个条件吗?
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);
这是两个三元运算符。三元运算符将 if-else 语句压缩到一行中。 (expression ? fireOnTrue() : fireOnFalse())
例如
if(D == 4) {
explode();
} else {
explodeTwice();
}
可以写成:
D == 4 ? explode() : explodeTwice()
因此,如果我们拿(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10);
并分解它,我们会得到:
if(D == 4) {
(i % 2 == 0 ? 10 : 14);
} else
10;
}
再分解一步,我们就可以得到:
if(D == 4) {
if(i % 2 == 0) {
10;
} else {
14;
}
} else
10;
}
让我们逐一介绍那个怪物。
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
此行使用三元运算符 x ? y : z
,返回
-
y
如果x == true
-
z
如果x == false
(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
首先检查D
是否等于4
:
- 如果
D
等于4
则返回(i % 2 == 0 ? 10 : 14)
- 如果
D
不等于4
则返回10
。
如果D
恰好等于4
则表达式(i % 2 == 0 ? 10 : 14)
将被解析:
(i % 2 == 0 ? 10 : 14)
首先检查i % 2 == 0
是真还是假。 %
是余数又名模运算符,它返回 a % b
的除法 a/b 的余数。
将该结果与0
进行比较等同于说"平均划分",即没有余数。
除以2
的余数可以是0
或1
,因此:
-
0
i
是否为偶数 -
1
如果i
是奇数
换句话说,如果i
是偶数,(i % 2 == 0 ? 10 : 14)
将返回10
,如果i
是奇数,则返回14
。
总之,(D == 4 ? (i % 2 == 0 ? 10 : 14) : 10)
根据D
和i
,可以评估为 10
或14
,如下所示:
- 如果
D == 4
和i
是偶数,则计算结果为10
- 如果
D == 4
和i
是奇数,则计算结果为14
- 如果
D != 4
,则计算结果为10
因此,表达式可以简化为以下方法:
int return10or14(int D, int i) {
if (D != 4 || i % 2 == 0)
return 10;
else
return 14;
}
表达式 a
? b:c 只是表示 if(a( 那么 b ,否则 c。因此,假设您的表达式计算结果为 retval,它可以写成:
if(D == 4)
{
if(i%2 == 0)
retval = 10;
else
retval = 14;
}
else retval = 10;
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在java中解决这段代码时面临循环中的问题
- 将鼠标悬停在问题上时与预期">"相关的代码错误
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 读取最后一行代码算法 - c++ 时出现问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- Xcode 语义问题引用或以前定义的代码
- 需要以下代码的帮助,下面的代码有什么问题
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 如何在代码问题中解决此问题 代码强制
- C 代码问题?编译器问题?代码块
- C - 如果语句问题.代码将不会运行其他,否则
- 简单的NOOB C 输入/输出问题:代码错误
- NDK:0xdeadd00d时虚拟机中止和致命信号 11 (SIGSEGV) 的问题(代码 = 1)
- 编译问题 - 代码 C2129
- c++问题代码段
- 模板作用域问题代码无法编译
- 基本 CUDA 程序的问题.代码或编译器