sobrecarga operadores operador new incremento ejemplos definicion decremento c++ c operators decrement

new - sobrecarga de operadores c++



¿Por qué los operadores de disminución múltiple no funcionan en C cuando funcionan en C++? (1)

Mirando this pregunta y probando algunos de los códigos:

int x = 100; while ( 0 <-------------------- x ) { printf("%d ", x); }

Intenté compilar con gcc y obtuve el siguiente error:

file.c: In function ''main'': file:c:10:27: error: lvalue required as decrement operand while ( 0 <-------------------- x )

Pero compilar con g++ funciona. ¿Por qué este código es válido en C ++ pero no en C?


En C, --x es un valor, no un valor de --x . Su efecto es disminuir x , y evaluar el nuevo valor asignado de x . Dado que --x no es un valor lime, no puede disminuirse.

En C ++, --x es un lvalue, no un rvalue. Su efecto es decrementar x , y evaluar a x como un valor l. Como --x es un valor de nuevo, se puede disminuir de nuevo.

La razón por la que tiene sentido que --x sea ​​un lvalue en C ++ es porque C ++ introdujo tipos de referencia. Dado

void f(int &); int i;

puede tener sentido llamar a f(--i) , que pasa i por referencia después de disminuirlo.

Como C no tiene tipos de referencia, no tiene mucho sentido que --i sea ​​un valor l. Históricamente, nunca lo fue, ya diferencia de C ++, C nunca obtuvo una razón convincente para cambiar las reglas.

Tenga en cuenta que C ++ requería cambios más extensos que hacer que --x un valor --x para que realmente funcione. Hacer que --x un valor de --x , sin nada más, haría --x un comportamiento indefinido, porque no habría un punto de secuencia entre la modificación de x y la posterior conversión de valor a valor de l. Aún más claramente así para ----x . C ++ tuvo que modificar las reglas de secuencia para que funcionara. En C, las modificaciones a las reglas de secuenciación pueden causar problemas para que los compiladores existentes se ajusten a las nuevas reglas, por lo que tales modificaciones probablemente se rechacen a menos que haya un gran beneficio.