提问人:Ethicist 提问时间:8/25/2022 最后编辑:Shane BishopEthicist 更新时间:8/25/2022 访问量:108
以更简洁的方式将两个非布尔值的真实值传递给函数
pass truthy value of two non-boolean values to a function in a more terse way
问:
我在这里的目标是将 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);
}
答:
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));
评论