En el caso general, C++ permite que las declaraciones separadas por comas se evalúen en cualquier orden.
Si se refiere a las comas entre los argumentos de funciones, eso es solo un separador.
En su caso, está usando el operador de coma , y eso introduce un punto de secuencia que garantiza que todos los efectos secundarios del operando izquierdo de la coma se hayan establecido antes de evaluar el correcto.
Así que sí, está bien definido.
Desde la sección 5.18/1 de la norma 98 de la ISO C++:
Un par de expresiones separadas por una coma se evalúa de izquierda a derecha y el valor de la expresión izquierda se descarta. Las conversiones estándar lvalue-to-rvalue (4.1), array-to-pointer (4.2) y function-to-pointer (4.3) no se aplican a la expresión izquierda. Todos los efectos secundarios (1.9) de la expresión izquierda, excepto la destrucción de los temporales (12.2), se realizan antes de la evaluación de la expresión correcta. El tipo y el valor del resultado son el tipo y el valor del operando correcto; el resultado es un lvalue si su operando derecho es.
Supongo que esto está fuera de tu punto, pero por las dudas: podrías reescribir esa condición como 'i ++ <= 10' y deshacerte del operador de coma. Ahora ve y dime que esto está fuera de tu punto. ':)' – sbi
@sbi - ¿Eso hace lo mismo? Lo hubiera esperado con el prefijo pero no con postfix. es decir. '++ i, i <= 10' es lo mismo que' ++ i <= 10' –
@Steve: Me tienes allí. Sí, debería ser '++ i <= 10'. Lo siento por eso. (Realmente no debería intentar hacer eso mientras [chateando] (http://chat.stackoverflow.com/rooms/10/c-lounge).) – sbi