Я получаю удовольствие от выражений сгиба, чтобы лучше понять, где я смогу использовать их в своих проектах. Поэтому я предпочитаю инициализировать их простым
(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
и т. д. вместо 0, 0, 0, 0
? Я прохожу для каждого аргумента, он будет делать что-то вроде этого: arg1 >>= arg2, arg2 >>= arg3, arg3 >>= arg4, etc
, но это правда, что тогда последнее значение должно быть 1, тогда оно также может быть 0, 0, 0, 1
.