C++? for 循环中带有 continue 运算符的运算符

C++ ? operator with continue operator in for loop

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

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 ':'

有什么方法可以使用continue with吗?运算符或只是简单地以某种方式避免错误情况 ???

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

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

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

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

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

三元?: operator应用于表达式并给出一个表达式(因此不能用于语句)。

条件语句使用 if 关键字。在您的情况下,它更具可读性(因为您使用 sum += i 只是为了它的副作用)并且 if 语句在这里更容易理解。

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.

之后没有其他语句

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

int j, i,

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

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