1

我不知道这段代码发生了什么。

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;
}
4

1 回答 1

0

当包包含零个元素时,一元&&||折叠被定义为分别返回truefalse。事实上,它们是仅有的三个允许使用零元素折叠的运算符中的两个,最后一个是逗号运算符,,它返回一个 prvalue 类型void。这就是为什么喜欢的代码nums + ...通常应该重写为nums + ... + 0.

当包包含一个元素时,折叠表达式总是展开为唯一的元素。

为什么?这就是标准所说的。因为它被定义为唯一有意义的方式。除此之外没有什么可说的了。

于 2019-07-28T14:30:33.757 回答