C++ reference type qualified with const or volatile

Ссылочный тип, объявленный с избыточным const или volatile определитель

Описание

Этот дефект возникает, когда переменная со ссылочным типом объявляется с const или volatile квалификатор, для образца:

char &const c;

Риск

Стандарт C++ 14 утверждает, что const или volatile квалифицированные ссылки плохо сформированы (если они не введены через typedef, в этом случае они игнорируются). Например, ссылка на одну переменную не может быть сделана, чтобы ссылаться на другую переменную. Поэтому использование const квалификатор не требуется для переменной со ссылочным типом.

Часто использование этих квалификаторов указывает на ошибку кодирования. Например, вы хотели объявить ссылку на const-квалифицированный тип:

char const &c;
но вместо этого объявил const-квалифицированная ссылка:
char &const c;
Если ваш компилятор не обнаруживает ошибку, можно увидеть неожиданные результаты. Например, вы можете ожидать c быть неизменяемым, но видеть другое значение c по сравнению с ее значением при объявлении.

Зафиксировать

Посмотрите, const ли или volatile неверно размещен квалификатор. Например, посмотрите, хотите ли вы обратиться к const-квалифицированный тип и введенный:

char &const c;
вместо:
char const &c;
Если квалификатор размещен неправильно, исправьте ошибку. Поместите const или volatileквалификатор перед & оператор. В противном случае удалите избыточный квалификатор.

Примеры

расширить все

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

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

Коррекция - Удаление 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;
}

Информация о результатах

Группа: Хорошая практика
Язык: C++
По умолчанию: Off
Синтаксис командной строки : CV_QUALIFIED_REFERENCE_TYPE
Влияние: Низкое
Введенный в R2019a