C-style cast in C++ code
ID |
c.maintainability.c_style_cast |
Severity |
low |
Remediation Complexity |
medium |
Remediation Risk |
medium |
Remediation Effort |
medium |
Resource |
Cast |
Language |
C / C++ |
Description
A C-style cast (T)expr silently performs whichever conversion compiles — including reinterpret- or const-casts — so the intent is unclear and dangerous conversions go unnoticed. Use a named cast (static_cast, const_cast, reinterpret_cast) that states exactly what is intended and is easy to search for.
Rationale
A C-style cast (T)expr silently performs whichever conversion compiles — including reinterpret- or const-casts — so the intent is unclear and dangerous conversions go unnoticed. Use a named cast (static_cast, const_cast, reinterpret_cast) that states exactly what is intended and is easy to search for.
The following code illustrates the pattern detected by this rule:
struct A {};
struct B : A {};
void f(int i, A *a) {
// FLAGGED: C-style cast in C++ code
double d = (double)i;
// FLAGGED: C-style cast in C++ code
B *b = (B *)a;
double d2 = static_cast<double>(i);
double d3 = double(i);
int j = (i);
}
Remediation
Follow secure coding practices and review the references below for detailed remediation guidance.