Поскольку операторы сдвига битов возвращают значение.
Вы хотите это:
#include <iostream>
int main()
{
int i = 3;
i = i << 1;
std::cout << i;
}
Операторы сдвига не сдвигаются "на месте".Возможно, вы думаете о другой версии.Если бы они это сделали, как и многие другие бинарные операторы C ++, у нас случились бы очень плохие вещи.
i <<= 1;
int a = 3;
int b = 2;
a + b; // value thrown away
a << b; // same as above