In my personal opinion the first line is much less intentional then the second line. With all these explicit casts the code looses expressiveness and clarity.
Vector2i result = static_cast<Vector2i>(static_cast<Vector2f>(windowsize) * factor);
Vector2i result = windowsize * factor;
If you want to store the result in the vector itself, it becomes even worse because you can't use the
*= operator.
windowsize = static_cast<Vector2i>(static_cast<Vector2f>(windowsize) * factor);
windowsize *= factor;
But that's just my sense of neat coding. You have reasons for these operators to not exist, and that's understandable.