如何从单个C++;返回语句? 在C++中返回真< /COD>或 false ,我知道原因。

如何从单个C++;返回语句? 在C++中返回真< /COD>或 false ,我知道原因。,c++,algorithm,function,return,boolean-logic,C++,Algorithm,Function,Return,Boolean Logic,但是我需要一个变通方法,这样我就可以通过返回语句(或类似的语句)返回第一个非零值,就像Python中发生的那样 我不是在寻找条件语句,因为它看起来不整洁 基本上,可以通过宏或其他方式缩短以下代码吗 return a or b or c or d; 该任务可以通过在return语句中使用必要的函数来完成 例如,我没有使用宏,而是使用了一个模板函数,它接受中的参数: int fun(int a, int b, int c, int d) { return a ? a : b ? b : c

但是我需要一个变通方法,这样我就可以通过返回语句(或类似的语句)返回第一个非零值,就像Python中发生的那样

我不是在寻找条件语句,因为它看起来不整洁

基本上,可以通过宏或其他方式缩短以下代码吗

return a or b or c or d;

该任务可以通过在return语句中使用必要的函数来完成

例如,我没有使用宏,而是使用了一个模板函数,它接受中的参数:

int fun(int a, int b, int c, int d)
{
    return a ? a : b ? b : c ? c : d;
}
该链接中的问题也可以通过以下方式解决:

return OR({a, b, c, d});
请注意,它取决于给定类型
T
的隐式布尔转换。那么比如说,。此外,用户定义的类型应具有
运算符bool()const
,以符合此解决方法

另外,当我试图问我在这个问题的可变模板解决方案中的错误时,我自己发现了这个解决方案:p

注意:


请参阅答案,了解在处理更复杂的设计时这种方法的局限性。

此任务可以通过使用return语句中的必要函数来完成

例如,我没有使用宏,而是使用了一个模板函数,它接受中的参数:

int fun(int a, int b, int c, int d)
{
    return a ? a : b ? b : c ? c : d;
}
该链接中的问题也可以通过以下方式解决:

return OR({a, b, c, d});
请注意,它取决于给定类型
T
的隐式布尔转换。那么比如说,。此外,用户定义的类型应具有
运算符bool()const
,以符合此解决方法

另外,当我试图问我在这个问题的可变模板解决方案中的错误时,我自己发现了这个解决方案:p

注意:


请参阅答案,了解在处理更复杂的设计时这种方法的局限性。

我会这样编写函数:

return OR({(m + s - 1) % n, n});
它又干净又短。我可以停在这里,但让我们探索一下可以做什么

有一种算法已经基本上满足了您的需求。对以下溶液进行轻微修改:

然后,无论
foo
返回什么,都必须调用
昂贵的函数。恢复短路能力的方法是传递可调用项,这可能是错误的

auto x = first_non_zero_or_zero( { foo(), expensive_function() });

结论:不要让事情变得过于复杂。函数应该做一件事。您的
乐趣
所做的一件事是返回4个整数中的第一个非零整数,如果不是,则返回一个
是最简单的方法。

我将这样编写函数:

return OR({(m + s - 1) % n, n});
它又干净又短。我可以停在这里,但让我们探索一下可以做什么

有一种算法已经基本上满足了您的需求。对以下溶液进行轻微修改:

然后,无论
foo
返回什么,都必须调用
昂贵的函数。恢复短路能力的方法是传递可调用项,这可能是错误的

auto x = first_non_zero_or_zero( { foo(), expensive_function() });


结论:不要让事情变得过于复杂。函数应该做一件事。您的
乐趣
所做的一件事是返回4个整数中的第一个非零,而
if else
是完成此操作的最简单方法。

哦,您就是OP;)<代码>初始值设定项列表
在我看来似乎更好,变量方法无论如何都需要返回一个唯一的类型(
std::common\u type
?)。还要注意,一旦编写一个函数,就会失去短路的能力。假设调用
不是使用
int
s,而是使用
或({some\u function(),some\u other\u function())
则必须调用这两个函数,以便可以调用
。如果您编写
int temp=some_函数();如果(温度)返回温度;temp=一些其他函数();如果(温度)返回温度 >如果代码>某个函数返回非零,另一个将不被调用,即短CurTiCuji对您的<代码> Foo> 示例没有区别,但它是一个反对使用这种函数的理由,也许是您在C++中没有找到类似的原因的一部分(但在Python中),哦,您是OP;代码>初始值设定项列表
在我看来似乎更好,变量方法无论如何都需要返回一个唯一的类型(
std::common\u type
?)。还要注意,一旦编写一个函数,就会失去短路的能力。假设调用
不是使用
int
s,而是使用
或({some\u function(),some\u other\u function())
则必须调用这两个函数,以便可以调用
。如果您编写
int temp=some_函数();如果(温度)返回温度;temp=一些其他函数();如果(温度)返回温度 >如果代码>某个函数< /COD>返回非零,另一个将不被调用,即短CurTiCuji对您的<代码> Foo> 示例没有区别,但它是一个反对使用这种函数的理由,也许是您在C++中没有找到类似的原因的一部分(但在Python中)我的主要目标不是围绕
fun
,这只是一个最小的可复制示例。我想要的是一种泛泛而谈的方法来模仿Python行为:P,但是我喜欢这个答案中包含的深层概念。@ AdtEngor如我之前所说,C++不是Python。通过比较两种语言可以学到很多东西,试着看看在一种语言中能做的事情在另一种语言中也能做,但通常一种语言中惯用的东西在另一种语言中可能是垃圾。此外,一行程序并不总是最具可读性的。不管怎样,我在探索这个问题时很开心,但我认为结论和其他问题一样重要。我也是,这么简单的问题能让我们探索很多东西,真是令人着迷;)你在线吗?我怀疑我的主要目标不是围绕着你
int fun(int a,int b,int c) {
    first_non_zero( [](){ return a;},
                    [](){ return b;},
                    [](){ return c;})
}