CERT C++: DCL52-CPP

Никогда не квалифицируйте ссылочный тип с const или энергозависимый

Описание

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

Никогда не квалифицируйте ссылочный тип с const или энергозависимый. [1]

Реализация Polyspace

Это средство проверки проверяет на эти проблемы:

  • Тип Полной ссылки const.

  • Модификация Типов полной ссылки const.

Примеры

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

int func (int &const iRef) {
    iRef++;
    return iRef%2;
}

В этом примере, iRef const- тип полной ссылки. Начиная с iRef не может относиться к другой переменной, const спецификатор избыточен.

Проблема

Удалите избыточный const спецификатор. Начиная с iRef изменяется в func, это не предназначено, чтобы относиться к const- квалифицированная переменная. Перемещение const спецификатор перед & вызовет ошибку компиляции.

int func (int &iRef) {
    iRef++;
    return iRef%2;
}

Коррекция — фиксирует размещение const Спецификатор

Если вы не идентифицируете, чтобы изменить iRef в func, объявите iRef как ссылка на const- квалифицированная переменная. Поместите const спецификатор перед & оператор. Убедитесь, что вы не изменяете iRef в func.

int func (int const &iRef) {
    return (iRef+1)%2;
}
typedef const int cint;           
typedef cint& ref_to_cint;       

void func(ref_to_cint refVal, int initVal){
   refVal = val;
}

В этом примере, ref_to_cint ссылка на const- квалифицированный тип. Переменная refVal из типа ref_to_cint как предполагается, инициализируется когда func называется и не изменяется впоследствии. Модификация нарушает контракт, подразумеваемый const спецификатор.

Проблема

Одна возможная коррекция должна избежать const в объявлении ссылочного типа.

typedef int& ref_to_int;       

void func(ref_to_int refVal, int initVal){
   refVal = val;
}

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

Группа: 01. Объявления и инициализация (DCL)

Введенный в R2019a


[1]  Это программное обеспечение было создано MathWorks, включающим фрагменты: “Веб-сайт SEI CERT-C”, © 2017 Carnegie Mellon University, веб-сайт SEI CERT-C © 2017 Carnegie Mellon University”, CERT SEI C Кодирование Стандарта – Правил для Разработки безопасных, Надежных и Защищенных систем – 2 016 Выпусков”, © 2016 Carnegie Mellon University, and “CERT SEI Стандарт Кодирования C++ – Правил для Разработки безопасных, Надежных и Защищенных систем на C++ – 2 016 Выпусков” © 2016 Carnegie Mellon University, со специальным разрешением от его Института программной инженерии.

ЛЮБОЙ МАТЕРИАЛ УНИВЕРСИТЕТА КАРНЕГИ-МЕЛЛОН И/ИЛИ ЕГО ИНСТИТУТА ПРОГРАММНОЙ ИНЖЕНЕРИИ СОДЕРЖАЛ, ЗДЕСЬ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ "ASIS". УНИВЕРСИТЕТ КАРНЕГИ-МЕЛЛОН НЕ ДАЕТ ГАРАНТИЙ НИКАКОГО ВИДА, ИЛИ ВЫРАЗИЛ ИЛИ ПОДРАЗУМЕВАЛ, ОТНОСИТЕЛЬНО ЛЮБОГО ВОПРОСА ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИЛ, ГАРАНТИЯ ПРИГОДНОСТИ ДЛЯ ЦЕЛИ ИЛИ ВЫСОКОГО СПРОСА, ИСКЛЮЧИТЕЛЬНОСТИ, ИЛИ ЗАКАНЧИВАЕТСЯ ПОЛУЧЕННЫЙ ИЗ ИСПОЛЬЗОВАНИЯ МАТЕРИАЛА. УНИВЕРСИТЕТ КАРНЕГИ-МЕЛЛОН НЕ ДАЕТ ГАРАНТИИ НИКАКОГО ВИДА ОТНОСИТЕЛЬНО СВОБОДЫ ОТ ПАТЕНТА, ТОВАРНОГО ЗНАКА ИЛИ НАРУШЕНИЯ АВТОРСКОГО ПРАВА.

Это программное обеспечение и сопоставленная документация не были рассмотрены, ни являются подтвержденным Университетом Карнеги-Меллон или его Институтом программной инженерии.