Syntactically it is correct in non-strict mode (this is because i is not declared where you cin it because you have a stray semicolon after the for()). The loop will never terminate (bla = 1 is an assignment expression that, when converted to bool, will always be true since false == 0 and true == not false). Also, the semicolon at the end of the for() means that what you intended to be the loop body -- the cin << i -- is not actually part of the loop.
But yes, the three expressions inside the for() need not refer to the same variables.