c++ - 条件表达式的计算结果可以在C++中返回吗

标签 c++ function return return-value

f(-1);

int f(int a) {
    return (a%2) ? (a%2) : (a*2);
}

考虑上面的函数 f() ,如果 a%2 被评估为非零,则返回 a%2

问题: 是否有任何高级运算符或表达式可以合并条件和返回值并形成类似于

return (a%2) OR (a*2)  // underlying logic is return (a%2) ? (a%2) : (a*2);

我知道我已经提供了一种可能的解决方案 return (a%2) ? (a%2) : (a*2); 已经,但我想更多地探索 C++,所以我问了这个问题。这个问题只是一个是/否问题。我期待使用 if-else 语句以外的答案

我的想法:

条件中的

a%2 被评估并转换为 bool 类型,因此无法转换回相应的 int 值。

最佳答案

您可以利用 bool 表达式结果为 0 或 1 的事实并使用

int f(int a) {
    return (a > -1) * (a + 1);
}

如果 (a > -1) 为真那么我们有 1 * (a + 1) 否则我们有 0 * (a + 1).

不过我不建议这样做。清晰的代码应该是您在代码中尝试维护的重要内容之一。使用众所周知的语法,如 condition ? true_result : false_result 恕我直言更好。

编辑:

如果您希望该值不是零,那么它会变得有点复杂。您需要将 false 条件的值乘以 bool 表达式的返回值,该表达式仅在 true 条件为 false(非条件)时才为真。

int f(int a) {
    return ((a % 2) * (a % 2)) + (!(a % 2) * (a * 2));
    //     ^    true part    ^   ^    false part    ^
}

true 部分0 时,false 部分 将是一个值,而当 false 部分 > 是 0 true part 将是一个值。

关于c++ - 条件表达式的计算结果可以在C++中返回吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35441618/

相关文章:

c++ - uint8_t 到 uint16_t 的 memcpy

javascript - 在 javascript/jquery 中传递可选参数

JavaScript:如何从函数返回两个值并在另一个函数中调用这两个变量?

python - Python如何从一个函数返回多个值?

node.js - 函数回调的返回值

c++ - 使用自由函数作为 LPOVELAPPED_COMPLETION_ROUTINE

c++ - 像 printf 一样格式化输出到文件

c++ - Objective C 的 Xcode 6 上出现错误 'Undefined symbols for architecture x86_64 '

javascript - 测试回调在哪个函数中执行

javascript - 在 AngularJs 中,如何将函数合并为通用函数以用于不同的 Controller ?