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
强制转换掉 const
。 const_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::span
或 std::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::span
或 std::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