我不知道这段代码中发生了什么。
SimpleFunction(1,2,3) 等于
1&&(2&&3) //1
1||(2||3) //1
SimpleFunction(1) 等于
1&&Something //1
1||Something //1
SimpleFunction() 等于
voidvalue (&&) //1
voidvalue (||) //0
什么是“某事”?
SimpleFunction(void) 中发生了什么??
一元折叠中的逻辑运算符有什么特别之处吗??
#include<iostream>
using namespace std;
template <typename ...Ts>
void SimpleFunction(Ts ... ts)
{
cout<<(ts && ...)<<endl;
cout<<(ts || ...)<<endl;
}
int main()
{
SimpleFunction(); // 1, 0
cout<<endl;
SimpleFunction(1); // 1, 1
cout<<endl;
SimpleFunction(1,2,3); // 1, 1
cout<<endl;
return 0;
}
最佳答案
当包包含零个元素时,一元 &&
和 ||
折叠被定义为返回 true
和 false
,分别。事实上,它们是仅有的三个允许用零元素折叠的运算符中的两个,最后一个是逗号运算符 ,
,它返回类型为 void
的纯右值。这就是为什么像 nums + ...
这样的代码通常应该重写为 nums + ... + 0
。
当包包含一个元素时,折叠表达式总是扩展到唯一的元素。
为什么?标准是这么说的。因为它被定义为唯一有意义的方式。除此之外没有更多要说的了。
关于c++ - 关于在模板中使用可变参数的逻辑运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57229738/