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 потому что эти две переменные имеют перекрывающиеся области памяти.

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

Группа: Языковые независимые вопросы
Категория: Требуемая
Введенный в R2016b