C++ ? 运算符,在 for 循环中继续运算符

C++ ? operator with continue operator in for loop

本文关键字:运算符 循环 for 继续 C++      更新时间:2023-10-16

>我有一个看起来像这样的方法:

bool Perfect(int num) {
int sum = 0;
for (int i = 1; i < num; i++)
{
num%i == 0 ? sum += i : continue;
}
return sum == num ? true : false;
}

我正在尝试在这里组合? 运算符与继续运算符...

因此,从逻辑上讲,如果此处的语句在此行中为假:

num%i == 0 ? sum += i : continue;

我会跳过迭代还是什么都不做?

如果我这样做,编译器会报告如下错误:

expected an expression

在这种情况下:

num%i == 0 ? sum += i

它说:

Expected a ':'

有没有办法使用继续使用?运算符,或者只是简单地避免错误大小写,???

bool Perfect(int num) {
int sum = 0;
for (int i = 1; i < num; i++)
{
if(num % i == 0)
sum += i;
}
return sum == num;
}

使用if语句。无需continue,因为您在sum += i之后没有其他语句。

C++ 和 C 同时具有语句和表达式(请注意,赋值或函数调用是表达式,表达式语句)。它们是不同的句法(和语义)事物。

您可以在for循环中编码(但这是一种奇怪的样式,因为语句简化为?:条件表达式):

(num%i == 0) ? (sum += i) : 0;

(当num%i不为零时,计算结果为没有明显副作用的0;顺便说一句,0的最后一次出现可能是1234或任何常量积分表达式)

一些编程语言(特别是Scheme,读作SICP)只有表达式(没有语句)。

三元?:运算符适用于表达式并给出表达式(因此不能用于语句)。

条件语句使用if关键字。在您的情况下,它的可读性要高得多(因为您仅出于副作用而使用sum += i),并且if语句在这里更容易理解。

不能以这种方式使用三元运算符。您通常会使用它来根据表达式的真或假为变量赋值。例如。

int j, i,
j = (i == 2) ? 5: 10;

如果 i 等于 2,则 j的值为 5,否则如果 i 不等于 2,则 j 的值为 10。