Поделиться через


C28753

предупреждение C28753: использование неопределенного порядка оценки параметров

C/C++ позволяет компилятору создавать код для оценки фактических параметров в любом порядке, а компиляторы x86 и Arm, как правило, выбирают разные порядки. Код, зависящий от определенного порядка, может вести себя по-разному на разных платформах.

Распространенная ошибка заключается в использовании интеллектуальных указателей, где оператор address-of & имеет побочные эффекты в таких вызовах:

sp->Foo(&sp);

Вызовы оператора доступа к членам и> оператора& могут выполняться в любом порядке. Таким образом, побочные эффекты от оператора& могут возникать до или после вызова оператора -> . Это предупреждение находит эти ошибки вызовы, чтобы предотвратить различное поведение на разных платформах.

Примере

В следующем примере кода показано, как создать это предупреждение.

sp->Foo(&sp)

Следующий пример кода позволяет избежать этого предупреждения.

SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;