exponenta event banner

Эталонный тип C++, квалифицированный как const или 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++
По умолчанию: Откл.
Синтаксис командной строки: CV_QUALIFIED_REFERENCE_TYPE
Воздействие: Низкий
Представлен в R2019a