Поделиться через


Справочник по проверке основных рекомендаций C++

В этом разделе перечислены предупреждения проверки основных рекомендаций C++ . Сведения о анализе кода см. в разделе /analyze (Анализ кода) и краткое руководство. Анализ кода для C/C++.

Примечание.

Некоторые предупреждения относятся к нескольким группам, а не все предупреждения имеют полный справочный раздел.

Группа OWNER_POINTER

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT
Возвращает объект с областью действия вместо кучи, выделенной при наличии конструктора перемещения. См . основные рекомендации по C++ R.3.

C26403 RESET_OR_DELETE_OWNER
Сброс или явное удаление указателя T> владельца<"переменная". См . основные рекомендации по C++ R.3.

C26404 DONT_DELETE_INVALID
Не удаляйте владельца<T> , который может находиться в недопустимом состоянии. См . основные рекомендации по C++ R.3.

C26405 DONT_ASSIGN_TO_VALID
Не присваивайте владельцу<T> , который может находиться в допустимом состоянии. См . основные рекомендации по C++ R.3.

C26406 DONT_ASSIGN_RAW_TO_OWNER
Не назначайте необработанный указатель владельцу<T>. См . основные рекомендации по C++ R.3.

C26407 DONT_HEAP_ALLOCATE_UNNECESSARILY
Предпочитайте объекты с областью действия, не выделите ненужные кучи. См . основные рекомендации по C++ R.5.

C26429 USE_NOTNULL
Символ "символ" никогда не проверяется на значение NULL, его можно пометить как not_null. См . основные рекомендации C++ F.23.

C26430 TEST_ON_ALL_PATHS
Символ "символ" не проверяется на значение NULL во всех путях. См . основные рекомендации C++ F.23.

C26431 DONT_TEST_NOTNULL
Тип выражения expr уже gsl::not_null. Не проверяйте его на наличие значений NULL. См . основные рекомендации C++ F.23.

Группа RAW_POINTER

C26400 NO_RAW_POINTER_ASSIGNMENT
Не назначайте результат выделения или вызова функции с возвращаемым значением T владельца<T> в необработанный указатель. Вместо этого используйте владелец<T> . См . основные рекомендации C++ I.11.

C26401 DONT_DELETE_NON_OWNER
Не удаляйте необработанный указатель, который не является владельцем<T>. См . основные рекомендации C++ I.11.

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT
Возвращает объект с областью действия вместо кучи, выделенной при наличии конструктора перемещения. См . основные рекомендации по C++ R.3.

C26408 NO_MALLOC_FREE
Избегайте malloc() и free(), предпочитайте версию nothrow новой с удалением. См . основные рекомендации по C++ R.10.

C26409 NO_NEW_DELETE
Избегайте явного вызова новых и удаления, используйте std::make_unique<T> . См . основные рекомендации по C++ R.11.

C26429 USE_NOTNULL
Символ "символ" никогда не проверяется на значение NULL, его можно пометить как not_null. См . основные рекомендации C++ F.23.

C26430 TEST_ON_ALL_PATHS
Символ "символ" не проверяется на значение NULL во всех путях. См . основные рекомендации C++ F.23.

C26431 DONT_TEST_NOTNULL
Тип выражения expr уже gsl::not_null. Не проверяйте его на наличие значений NULL. См . основные рекомендации C++ F.23.

C26481 NO_POINTER_ARITHMETIC
Не используйте арифметический указатель. Вместо этого используйте диапазон. Ознакомьтесь с основными рекомендациями по C++.1.

C26485 NO_ARRAY_TO_POINTER_DECAY
Выражение "expr": нет массива для распада указателя. См . основные рекомендации по C++.3.

Группа UNIQUE_POINTER

C26410 NO_REF_TO_CONST_UNIQUE_PTR
Параметр "parameter" — это ссылка на const уникальный указатель, вместо этого используйте const T* или const T&. См . основные рекомендации по C++ R.32.

C26411 NO_REF_TO_UNIQUE_PTR
Параметр "parameter" является ссылкой на уникальный указатель, и он никогда не переназначен или сбрасывается, используйте T* или T& вместо этого. См . основные рекомендации по C++ R.33.

C26414 RESET_LOCAL_SMART_PTR
Перемещение, копирование, переназначение или сброс локального интеллектуального указателя "символ". См . основные рекомендации по C++ R.5.

C26415 SMART_PTR_NOT_NEEDED
Параметр smart pointer "symbol" используется только для доступа к автономному указателю. Вместо этого используйте T* или T&. См . основные рекомендации по C++ R.30.

Группа SHARED_POINTER

C26414 RESET_LOCAL_SMART_PTR
Перемещение, копирование, переназначение или сброс локального интеллектуального указателя "символ". См . основные рекомендации по C++ R.5.

C26415 SMART_PTR_NOT_NEEDED
Параметр smart pointer "symbol" используется только для доступа к автономному указателю. Вместо этого используйте T* или T&. См . основные рекомендации по C++ R.30.

C26416 NO_RVALUE_REF_SHARED_PTR
Параметр общего указателя "symbol" передается ссылкой rvalue. Вместо этого передайте по значению. См . основные рекомендации по C++ R.34.

C26417 NO_LVALUE_REF_SHARED_PTR
Общий параметр указателя "символ" передается по ссылке, а не сбрасывается или переназначается. Вместо этого используйте T* или T&. См . основные рекомендации по C++ R.35.

C26418 NO_VALUE_OR_CONST_REF_SHARED_PTR
Общий параметр указателя "символ" не копируется или не перемещается. Вместо этого используйте T* или T&. См . основные рекомендации по C++ R.36.

Группа ОБЪЯВЛЕНИЙ

C26426 NO_GLOBAL_INIT_CALLS
Глобальный инициализатор вызывает функцию non-constexpr "symbol". См . основные рекомендации C++ I.22.

C26427 NO_GLOBAL_INIT_EXTERNS
Глобальный инициализатор обращается к объекту extern 'symbol'. См . основные рекомендации C++ I.22.

C26444 NO_UNNAMED_RAII_OBJECTS
Избегайте неназванных объектов с помощью пользовательского строительства и уничтожения. См. статью ES.84. Не объявляйте локальную переменную без имени.

Группа CLASS

C26432 DEFINE_OR_DELETE_SPECIAL_OPS
Если вы определяете или удаляете любую операцию по умолчанию в типе "символ", определите или удалите их все. См . основные рекомендации C.21.

C26433 OVERRIDE_EXPLICITLY
Функция "символ" должна быть помечена как переопределение. См. раздел C.128. Виртуальные функции должны указывать именно одну из виртуальных, переопределения или финала.

C26434 DONT_HIDE_METHODS
Функция "symbol_1" скрывает неиртуалную функцию "symbol_2". См . основные рекомендации C.128.

C26435 SINGLE_VIRTUAL_SPECIFICATION
Функция "символ" должна указывать именно одну из "virtual", "override" или "final". См. раздел C.128. Виртуальные функции должны указывать именно одну из виртуальных, переопределения или финала.

C26436 NEED_VIRTUAL_DTOR
Тип "symbol" с виртуальной функцией требует общедоступного или защищенного деструктора, отличного от виртуальных. См . основные рекомендации C.35.

C26443 NO_EXPLICIT_DTOR_OVERRIDE
Переопределяющий деструктор не должен использовать явные описатели override или virtual. См. раздел C.128. Виртуальные функции должны указывать именно одну из виртуальных, переопределения или финала.

Группа STYLE

C26438 NO_GOTO
Избегайте goto. См . основные рекомендации C++ ES.76.

Группа ФУНКЦИЙ

C26439 SPECIAL_NOEXCEPT
Такой вид функции может не вызывать. Объявите его noexcept. См . основные рекомендации по C++ F.6.

C26440 DECLARE_NOEXCEPT
Функция "символ" может быть объявлена noexcept. См . основные рекомендации по C++ F.6.

C26447 DONT_THROW_IN_NOEXCEPT
Функция объявлена noexcept , но вызывает функцию, которая может вызывать исключения. См . основные рекомендации по C++ : F.6. Если функция не может вызываться, объявите ее noexcept.

Группа CONCURRENCY

C26441 NO_UNNAMED_GUARDS
Объекты Guard должны быть названы. См . основные рекомендации C++ cp.44.

CONST Group

C26460 USE_CONST_REFERENCE_ARGUMENTS
Ссылочный аргумент "аргумент" для функции "функция" можно пометить как const. См . основные рекомендации по C++ con.3.

C26461 USE_CONST_POINTER_ARGUMENTS:
Аргумент указателя для функции "функция" можно пометить как указатель constна . См . основные рекомендации по C++ con.3.

C26462 USE_CONST_POINTER_FOR_VARIABLE
Значение, указываемое на "переменная", назначается только один раз, помечая его как указатель constна . См . основные рекомендации по C++ con.4.

C26463 USE_CONST_FOR_ELEMENTS
Элементы массива "массив" назначаются только один раз, пометьте элементы const. См . основные рекомендации по C++ con.4.

C26464 USE_CONST_POINTER_FOR_ELEMENTS
Значения, на которые указывают элементы массива "массив", назначаются только один раз, пометьте элементы как указатель на const. См . основные рекомендации по C++ con.4.

C26496 USE_CONST_FOR_VARIABLE
Переменная "переменная" назначается только один раз, помечая ее как const. См . основные рекомендации по C++ con.4.

C26497 USE_CONSTEXPR_FOR_FUNCTION
Эта функция может быть помеченаconstexpr, если необходимо оценить время компиляции. См . основные рекомендации по C++ F.4.

C26498 USE_CONSTEXPR_FOR_FUNCTIONCALL
Эта функция вызова функции может использовать constexpr , если необходимо оценить время компиляции. См . основные рекомендации C++ con.5.

Группа TYPE

C26437 DONT_SLICE
Не срезайте. См . основные рекомендации C++ ES.63.

C26465 NO_CONST_CAST_UNNECESSARY
Не используйте const_cast , чтобы выбросить const. const_cast не требуется; константа или волатильность не удаляются этим преобразованием. См . основные рекомендации по C++ Type.3.

C26466 NO_STATIC_DOWNCAST_POLYMORPHIC
Не используйте static_cast даункасты. Приведение из полиморфного типа должно использовать dynamic_cast. См . основные рекомендации по C++ Type.2.

C26471 NO_REINTERPRET_CAST_FROM_VOID_PTR
Не используйте reinterpret_cast. Приведение из void* может использоваться static_cast. См . основные рекомендации по C++ Type.1.

C26472 NO_CASTS_FOR_ARITHMETIC_CONVERSION
Не используйте static_cast арифметические преобразования. Инициализация фигурных скобок, gsl::narrow_cast или gsl::narrow. См . основные рекомендации по C++ Type.1.

C26473 NO_IDENTITY_CAST
Не приведение между типами указателей, где исходный тип и целевой тип совпадают. См . основные рекомендации по C++ Type.1.

C26474 NO_IMPLICIT_CAST
Не приведение между типами указателей, если преобразование может быть неявным. См . основные рекомендации по C++ Type.1.

C26475 NO_FUNCTION_STYLE_CASTS
Не используйте стиль функции C-casts. См . основные рекомендации C++ ES.49.

C26490 NO_REINTERPRET_CAST
Не используйте reinterpret_cast. См . основные рекомендации по C++ Type.1.

C26491 NO_STATIC_DOWNCAST
Не используйте static_cast даункасты. См . основные рекомендации по C++ Type.2.

C26492 NO_CONST_CAST
Не используйте const_cast , чтобы выбросить const. См . основные рекомендации по C++ Type.3.

C26493 NO_CSTYLE_CAST
Не используйте приведения в стиле C. См . основные рекомендации по C++ Type.4.

C26494 VAR_USE_BEFORE_INIT
Переменная "переменная" неинициализирована. Всегда инициализировать объект. См . основные рекомендации по C++ Type.5.

C26495 MEMBER_UNINIT
Переменная "переменная" неинициализирована. Всегда инициализировать переменную-член. См . основные рекомендации по C++ Type.6.

Группа BOUNDS

C26446 USE_GSL_AT
Предпочитаете использовать gsl::at() вместо оператора подстрока без флажка. См . основные рекомендации по C++ : Bounds.4: не используйте функции и типы стандартной библиотеки, которые не проверяются.

C26481 NO_POINTER_ARITHMETIC
Не используйте арифметический указатель. Вместо этого используйте диапазон. См. основные рекомендации по C++.1

C26482 NO_DYNAMIC_ARRAY_INDEXING
Индексировать только в массивы с помощью константных выражений. См. основные рекомендации по C++.2

C26483 STATIC_INDEX_OUT_OF_RANGE
Значение выходит за пределы границ (0, привязано) переменной "переменной". Индексировать только в массивы с помощью константных выражений, находящихся в пределах массива. См. основные рекомендации по C++.2

C26485 NO_ARRAY_TO_POINTER_DECAY
Выражение "expr": нет массива для распада указателя. См. основные рекомендации по C++.3

Группа GSL

C26445 NO_SPAN_REF
Ссылка на gsl::span или std::string_view может быть признаком проблемы со временем существования. См. основные рекомендации по C++ GSL.view: Представления

C26446 USE_GSL_AT
Предпочитаете использовать gsl::at() вместо оператора подстрока без флажка. См . основные рекомендации по C++ : Bounds.4: не используйте функции и типы стандартной библиотеки, которые не проверяются.

C26448 USE_GSL_FINALLY
Рассмотрите возможность использования gsl::finally , если предполагается окончательное действие. См . основные рекомендации по C++ : GSL.util: служебные программы.

C26449 NO_SPAN_FROM_TEMPORARY
gsl::span или std::string_view созданный из временного объекта будет недопустимым, если временный недопустим. См . основные рекомендации по C++ : GSL.view: Представления.

Устаревшие предупреждения

Следующие предупреждения присутствуют в наборе ранних экспериментальных правил проверки основных рекомендаций, но теперь устарели и могут быть безопасно проигнорированы. Предупреждения заменяются предупреждениями из приведенного выше списка.

  • 26412 DEREF_INVALID_POINTER
  • 26413 DEREF_NULLPTR
  • 26420 ASSIGN_NONOWNER_TO_EXPLICIT_OWNER
  • 26421 ASSIGN_VALID_OWNER
  • 26422 VALID_OWNER_LEAVING_SCOPE
  • 26423 ALLOCATION_NOT_ASSIGNED_TO_OWNER
  • 26424 VALID_ALLOCATION_LEAVING_SCOPE
  • 26425 ASSIGNING_TO_STATIC
  • 26499 NO_LIFETIME_TRACKING

См. также

Использование средств проверки основных рекомендаций C++