C++ Core Guidelines 检查器参考

本节列出了 C++ Core Guidelines 检查器警告。 有关 Code Analysis 的信息,请参阅 /analyze(代码分析)快速入门:C/C++ 代码分析

注意

某些警告属于多个组,并非所有警告都有完整的参考主题。

OWNER_POINTER 组

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT
如果它具有移动构造函数,则返回范围内的对象,而不是堆分配的对象。 请参阅 C++ Core Guidelines R.3

C26403 RESET_OR_DELETE_OWNER
重置或显式删除 owner<T> 指针 "variable"。 请参阅 C++ Core Guidelines R.3

C26404 DONT_DELETE_INVALID
请勿删除可能处于无效状态的 owner<T>。 请参阅 C++ Core Guidelines R.3

C26405 DONT_ASSIGN_TO_VALID
请勿分配给可能处于有效状态的 owner<T>。 请参阅 C++ Core Guidelines R.3

C26406 DONT_ASSIGN_RAW_TO_OWNER
请勿将原始指针分配给 owner<T>。 请参阅 C++ Core Guidelines R.3

C26407 DONT_HEAP_ALLOCATE_UNNECESSARILY
首选范围内的对象,请勿进行不必要的堆分配。 请参阅 C++ Core Guidelines R.5

C26429 USE_NOTNULL
符号 “symbol” 永远不会进行 nullness 测试,可将其标记为 not_null。 请参阅 C++ Core Guidelines F.23

C26430 TEST_ON_ALL_PATHS
未在所有路径上测试符号 “symbol” 是否为空。 请参阅 C++ Core Guidelines F.23

C26431 DONT_TEST_NOTNULL
表达式的类型 “expr” 已经是 gsl::not_null。 不要测试它是否为空。 请参阅 C++ Core Guidelines F.23

RAW_POINTER 组

C26400 NO_RAW_POINTER_ASSIGNMENT
请勿将包含 owner<T> 返回值的分配或函数调用结果分配给原始指针,请改用 owner<T>。 请参阅 C++ Core Guidelines I.11

C26401 DONT_DELETE_NON_OWNER
请勿删除不是 owner<T> 的原始指针。 请参阅 C++ Core Guidelines I.11

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT
如果它具有移动构造函数,则返回范围内的对象,而不是堆分配的对象。 请参阅 C++ Core Guidelines R.3

C26408 NO_MALLOC_FREE
避免使用 malloc()和 free(),首选 nothrow 版本的 new 与 delete。 请参阅 C++ Core Guidelines R.10

C26409 NO_NEW_DELETE
避免显式调用 new 和 delete,请改用 std::make_unique<T>。 请参阅 C++ Core Guidelines R.11

C26429 USE_NOTNULL
符号 “symbol” 永远不会进行 nullness 测试,可将其标记为 not_null。 请参阅 C++ Core Guidelines F.23

C26430 TEST_ON_ALL_PATHS
未在所有路径上测试符号 “symbol” 是否为空。 请参阅 C++ Core Guidelines F.23

C26431 DONT_TEST_NOTNULL
表达式的类型 “expr” 已经是 gsl::not_null。 不要测试它是否为空。 请参阅 C++ Core Guidelines F.23

C26481 NO_POINTER_ARITHMETIC
请勿使用指针算术。 请改用范围。 请参阅 C++ Core Guidelines Bounds.1

C26485 NO_ARRAY_TO_POINTER_DECAY
表达式 “expr”: 没有数组可以衰减为指针。 请参阅 C++ Core Guidelines Bounds.3

UNIQUE_POINTER 组

C26410 NO_REF_TO_CONST_UNIQUE_PTR
参数“parameter”是对 const 唯一指针的引用,请改用 const T* 或 const T&。 请参阅 C++ Core Guidelines R.32

C26411 NO_REF_TO_UNIQUE_PTR
参数“parameter”是对唯一指针的引用,它永远不会被重新分配或重置,请改用 T* 或 T&。 请参阅 C++ Core Guidelines R.33

C26414 RESET_LOCAL_SMART_PTR
移动、复制、重新分配或重置本地智能指针 “symbol”。 请参阅 C++ Core Guidelines R.5

C26415 SMART_PTR_NOT_NEEDED
智能指针参数 “symbol” 仅用于访问包含的指针。 请改用 T* 或 T&。 请参阅 C++ Core Guidelines R.30

SHARED_POINTER 组

C26414 RESET_LOCAL_SMART_PTR
移动、复制、重新分配或重置本地智能指针 “symbol”。 请参阅 C++ Core Guidelines R.5

C26415 SMART_PTR_NOT_NEEDED
智能指针参数 “symbol” 仅用于访问包含的指针。 请改用 T* 或 T&。 请参阅 C++ Core Guidelines R.30

C26416 NO_RVALUE_REF_SHARED_PTR
共享指针参数 “symbol” 通过 rvalue 引用传递。 请改为通过值传递。 请参阅 C++ Core Guidelines R.34

C26417 NO_LVALUE_REF_SHARED_PTR
共享指针参数 “symbol” 通过引用传递,不会被重置或重新分配。 请改用 T* 或 T&。 请参阅 C++ Core Guidelines R.35

C26418 NO_VALUE_OR_CONST_REF_SHARED_PTR
共享指针参数 “symbol” 不会复制或移动。 请改用 T* 或 T&。 请参阅 C++ Core Guidelines R.36

DECLARATION 组

C26426 NO_GLOBAL_INIT_CALLS
全局初始值设定项调用非 constexpr 函数 “symbol”。 请参阅 C++ Core Guidelines I.22

C26427 NO_GLOBAL_INIT_EXTERNS
全局初始值设定项访问 extern 对象 “symbol”。 请参阅 C++ Core Guidelines I.22

C26444 NO_UNNAMED_RAII_OBJECTS
避免使用具有自定义构造和析构的未命名对象。 请参阅 ES.84:不要(试图)声明一个没有名称的局部变量

CLASS 组

C26432 DEFINE_OR_DELETE_SPECIAL_OPS
如果定义或删除类型 “symbol” 中的任何默认操作,请全部定义或删除它们。 请参阅 C++ Core Guidelines C.21

C26433 OVERRIDE_EXPLICITLY
函数 "symbol" 应标有 "override"。 请参阅 C.128: 虚函数应从 virtual、override 或 final 中明确指定一个

C26434 DONT_HIDE_METHODS
函数 "symbol_1" 隐藏了非虚函数 "symbol_2"。 请参阅 C++ Core Guidelines C.128

C26435 SINGLE_VIRTUAL_SPECIFICATION
函数 “symbol” 应从 "virtual"、"override" 或 "final" 中明确指定一个。 请参阅 C.128: 虚函数应从 virtual、override 或 final 中明确指定一个

C26436 NEED_VIRTUAL_DTOR
包含虚函数的类型 “symbol” 需要公共虚拟析构函数或受保护非虚拟析构函数。 请参阅 C++ Core Guidelines C.35

C26443 NO_EXPLICIT_DTOR_OVERRIDE
重写析构函数不应使用显式 “override” 或 “virtual” 说明符。 请参阅 C.128: 虚函数应从 virtual、override 或 final 中明确指定一个

STYLE 组

C26438 NO_GOTO
避免 goto。 请参阅 C++ Core Guidelines ES.76

FUNCTION 组

C26439 SPECIAL_NOEXCEPT
此类函数可能不会引发。 请将其声明为 noexcept。 请参阅 C++ Core Guidelines F.6

C26440 DECLARE_NOEXCEPT
函数 “symbol” 可以声明为 noexcept 请参阅 C++ Core Guidelines F.6

C26447 DONT_THROW_IN_NOEXCEPT
该函数声明为 noexcept,但调用可能引发异常的函数。 请参阅 C++ Core Guidelines:F.6:如果未引发函数,请将其声明为 noexcept

CONCURRENCY 组

C26441 NO_UNNAMED_GUARDS
临界对象必须具有名称。 请参阅 C++ Core Guidelines C.44

CONST 组

C26460 USE_CONST_REFERENCE_ARGUMENTS
函数 “function” 的引用参数 “argument” 可以标记为 const 请参阅 C++ Core Guidelines con.3

C26461 USE_CONST_POINTER_ARGUMENTS:
函数 “function” 的指针参数 “argument” 可以标记为指向 const 的指针。 请参阅 C++ Core Guidelines con.3

C26462 USE_CONST_POINTER_FOR_VARIABLE
仅分配一次 “variable” 指向的值,请将其标记为指向 const 的指针。 请参阅 C++ Core Guidelines con.4

C26463 USE_CONST_FOR_ELEMENTS
仅分配一次数组 “array” 的元素,请将元素标记为 const。 请参阅 C++ Core Guidelines con.4

C26464 USE_CONST_POINTER_FOR_ELEMENTS
仅分配一次数组 “array” 的元素指向的值,请将元素标记为指向 const 的指针。 请参阅 C++ Core Guidelines con.4

C26496 USE_CONST_FOR_VARIABLE
仅分配一次变量 “variable”,请将其标记为 const。 请参阅 C++ Core Guidelines con.4

C26497 USE_CONSTEXPR_FOR_FUNCTION
如果需要编译时计算,可以将函数 function 标记为 constexpr 请参阅 C++ Core Guidelines F.4

C26498 USE_CONSTEXPR_FOR_FUNCTIONCALL
如果需要编译时计算,此函数调用 function 可以使用 constexpr。 请参阅 C++ Core Guidelines con.5

TYPE 组

C26437 DONT_SLICE
请勿使用切片。 请参阅 C++ Core Guidelines ES.63

C26465 NO_CONST_CAST_UNNECESSARY
请勿使用 const_cast 强制转换掉 constconst_cast 不是必需的;此转换不会消除 constness 或 volatility。 请参阅 C++ Core Guidelines Type.3

C26466 NO_STATIC_DOWNCAST_POLYMORPHIC
请勿使用 static_cast 向下转换。 从多态类型强制转换应使用 dynamic_cast。 请参阅 C++ Core Guidelines Type.2

C26471 NO_REINTERPRET_CAST_FROM_VOID_PTR
不使用 reinterpret_cast。 从 void* 强制转换可以使用 static_cast。 请参阅 C++ Core Guidelines Type.1

C26472 NO_CASTS_FOR_ARITHMETIC_CONVERSION
请勿将 static_cast 用于算术转换。 请使用大括号初始化 gsl::narrow_cast 或 gsl::narrow。 请参阅 C++ Core Guidelines Type.1

C26473 NO_IDENTITY_CAST
当源类型与目标类型相同时,请勿在指针类型间强制转换。 请参阅 C++ Core Guidelines Type.1

C26474 NO_IMPLICIT_CAST
当强制转换可为隐式时,请勿在指针类型间强制转换。 请参阅 C++ Core Guidelines Type.1

C26475 NO_FUNCTION_STYLE_CASTS
请勿使用函数样式 C-casts。 请参阅 C++ Core Guidelines ES.49

C26490 NO_REINTERPRET_CAST
不使用 reinterpret_cast。 请参阅 C++ Core Guidelines Type.1

C26491 NO_STATIC_DOWNCAST
请勿使用 static_cast 向下转换。 请参阅 C++ Core Guidelines Type.2

C26492 NO_CONST_CAST
请勿使用 const_cast 强制转换掉 const。 请参阅 C++ Core Guidelines Type.3

C26493 NO_CSTYLE_CAST
请勿使用 C 样式转换。 请参阅 C++ Core Guidelines Type.4

C26494 VAR_USE_BEFORE_INIT
变量 “variable” 未初始化。 始终初始化对象。 请参阅 C++ Core Guidelines Type.5

C26495 MEMBER_UNINIT
变量 “variable” 未初始化。 始终初始化成员变量。 请参阅 C++ Core Guidelines Type.6

BOUNDS 组

C26446 USE_GSL_AT
优先使用 gsl::at() 而非未选中的下标运算符。 请参阅 C++ Core Guidelines:Bounds.4:请勿使用未选中边界的标准库函数和类型

C26481 NO_POINTER_ARITHMETIC
请勿使用指针算术。 请改用范围。 请参阅 C++ Core Guidelines Bounds.1

C26482 NO_DYNAMIC_ARRAY_INDEXING
只使用常量表达式在数组中编制索引。 请参阅 C++ Core Guidelines Bounds.2

C26483 STATIC_INDEX_OUT_OF_RANGE
值 value 超出变量 “variable” 的边界(0, bound)。 仅使用数组边界内的常量表达式在数组中编制索引。 请参阅 C++ Core Guidelines Bounds.2

C26485 NO_ARRAY_TO_POINTER_DECAY
表达式 “expr”: 没有数组可以衰减为指针。 请参阅 C++ Core Guidelines Bounds.3

GSL 组

C26445 NO_SPAN_REF
引用 gsl::spanstd::string_view 可能指示生存期问题。 请参阅 C++ Core Guidelines GSL.view:视图

C26446 USE_GSL_AT
优先使用 gsl::at() 而非未选中的下标运算符。 请参阅 C++ Core Guidelines:Bounds.4:请勿使用未选中边界的标准库函数和类型

C26448 USE_GSL_FINALLY
若打算实现最终操作,请考虑使用 gsl::finally。 请参阅 C++ Core Guidelines:GSL.util:实用工具

C26449 NO_SPAN_FROM_TEMPORARY
当临时文件失效时,从该临时文件创建的 gsl::spanstd::string_view 将变为无效。 请参阅 C++ Core Guidelines:GSL.view:视图

已弃用的警告

以下警告存在于 Core Guidelines 检查器的早期实验规则集中,但现已弃用,可以安全忽略。 上述列表中的警告将取代这些警告。

  • 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++ Core Guidelines 检查器