我对折叠表达式很感兴趣,以便更好地理解在我的项目中可以在哪里使用它们。所以我选择用一个简单的初始化它们
(datas = ... = 1);
到目前为止,一切都按预期工作,每个值都为 1。然后我尝试使用左移初始化,所以:
(datas = ... = 1);
(datas <<= ...);
这也是我期望的工作,它增加了 2 的幂,这很好。最后我尝试了这个:
(datas = ... = 1);
(datas >>= ...);
它给了我一个输出0, 1, 0, 1, 0, 1, ...
,我预计它会全部为 0。所以这里的代码:
#include <iostream>
template<typename... T>
void test(T&&... datas) {
(datas = ... = 1);
(datas >>= ...);
(std::cout << ... << (std::to_string(datas) + " ")) << std::endl;
}
int main(int argc, char const *argv[])
{
int v1, v2, v3, v4;
test(v1, v2, v3, v4);
return 0;
}
为什么它是0, 1, 0, 1
etc 而不是0, 0, 0, 0
?我通过每个参数它会做更多类似的事情:
arg1 >>= arg2, arg2 >>= arg3, arg3 >>= arg4, etc
但确实最后一个值应该是 1 那么它也可能是0, 0, 0, 1
.