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


C28753

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

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

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

sp->Foo(&sp);

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

Пример

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

sp->Foo(&sp)

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

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