Потому что с префиксом вы модифицируете объект, а затем возвращаете его (так что это может быть lvalue ), а с постфиксом вы возвращаете неизмененный объект (то есть копию) и только затем обновляете его (это Конечно, сначала нужно сохранить копию во временном файле, обновить исходный объект, а затем вернуть временное значение.)