Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.
Удаление 'const' / 'volatile' квалификаторов может привести к неопределённому поведению.
Компилятор вправе оптимизировать код в случае возникновения неопределённого поведения. Например, в следующем коде компилятор может сделать цикл бесконечным:
inline int foo(bool &flag) { while (flag) { // do some stuff... } return 0; } int main() { volatile bool flag = true; return foo(const_cast<bool &>(flag)); }
Другой пример кода, на который анализатор выдаст предупреждения:
void my_swap(const int *x, volatile int *y) { auto _x = const_cast<int*>(x); auto _y = const_cast<int*>(y); swap(_x, _y); } void foo() { const int x = 30; volatile int y = 203; my_swap(&x, &y); // <= }
Данная диагностика классифицируется как:
|