2012-02-15 6 views

Respuesta

9

No hay puntos de secuencia en C++ 11, sino que se secuenciaron antes y se secuenciaron después de las relaciones.

Éstos son algunos ejemplos triviales que el comportamiento difiere entre C++ y C++ 03 11

int x = 10; 
++++x; // well defined in C++11 

int x = 10; 
x = ++x +1; //well defined in C++11 

¿Por qué? Eche un vistazo a this respuesta e hilos relacionados.

4

Creo que el mejor ejemplo conocido es el operador de preincremento.

int i = 0; 
++ ++ ++ i; 

En C++ 03, esto sería UB, y en C++ 11, cada asignación se ordena antes de la próxima evaluación.

Buscar las diferencias en el estándar es difícil porque se deshicieron de la terminología de "punto de secuencia" a favor de "ordenado antes" y similares, y reescribieron muchas de las reglas desde cero.

+0

'Buscando diferencias en el estándar es difícil porque se deshicieron de la terminología del" punto de secuencia ", esta es la razón exacta por la que publiqué esta pregunta. – shuttle87

+0

@ shuttle87 Sí, lo siento, pero al menos se me ocurrió un ejemplo; v) – Potatoswatter

Cuestiones relacionadas