以更简洁的方式将两个非布尔值的真实值传递给函数

pass truthy value of two non-boolean values to a function in a more terse way

提问人:Ethicist 提问时间:8/25/2022 最后编辑:Shane BishopEthicist 更新时间:8/25/2022 访问量:108

问:

我在这里的目标是将 2 个给定值(字符串或数组)的非空值传递给函数。
在 Javascript 中,我可以做到:
foo

// values of variables a and b when calling foo
// a = "hello" 
// b = []
foo( a || b ) 
// passes a, since b is empty and a is not (i.e
// it contains at least 1 character)

然而,在 C++ 中,这不起作用,因为逻辑运算符仅适用于布尔值。||

我想知道是否有更短的替代方案:

std::vector<std::string> a; // assuming this is empty
std::string b;              // assuming this is NOT empty (contains a string value)
if (a.empty()){
    foo(b);
}else{
    foo(a);
}

C++ 布尔逻辑 真实性

评论


答:

2赞 Lou Franco 8/25/2022 #1

你可以使用 ,但你不能定义一个可以将其用作参数的 foo。所以试试吧?:

!a.empty() ? foo(a) : foo(b)

你不能制作一个采用任何一种类型的foo,因为C++是强类型的,而不是像Javascript那样动态的。并且不会改变这一点——你没有命名类型,但仍然有一个。auto

这也有效

foo(!a.empty() ? a : std::vector<std::string>(1, b));