MISRA C++:2008 Rule 0-2-1

Объект не должен быть присвоен перекрывающемуся объекту

Описание

Управляйте определением

Объект не должен быть присвоен перекрывающемуся объекту.

Объяснение

Когда вы присваиваете объект другому объекту с перекрывающейся памятью, поведение не определено.

Исключения:

  • Вы присваиваете объект другому объекту с точно перекрывающейся памятью и совместимым типом.

  • Вы копируете один объект в другого с memmove.

Обменивайтесь сообщениями в отчете

Объект не должен быть присвоен перекрывающемуся объекту.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

void func (void) {
    union {
        short i;
        int j;
    } a = {0}, b = {1};
    
    a.j = a.i;   //Noncompliant
    a = b;       //Compliant
}

В этом примере правило нарушено когда a.i присвоен a.j потому что эти две переменные имеют перекрывающиеся области памяти.

Проверяйте информацию

Группа: независимые от языка проблемы
Категория: необходимый

Введенный в R2017b