MISRA C++:2023 Rule 8.2.3
A cast shall not remove any const
or volatile
qualification from the type accessed via a pointer or by reference
Since R2024b
Description
Rule Definition
A cast shall not remove any const
or
volatile
qualification from the type accessed via a pointer or by
reference.
Rationale
Removing the const
or volatile
qualification from
a pointer or reference might be unexpected. Consider this
code:
void foo(const char* p){ *const_cast< char_t * >( p ) = '\0' }
foo()
accepts a const
pointer to a char
. The caller of this functions expects that the
parameter p
remains unchanged. Modifying p
in
foo()
by converting it to a non-const
pointer is
unexpected. If *p
dereferences to a const
character,
this modification might lead to unexpected behavior. Avoid casting the
const
or volatile
away from a pointer or
reference.Polyspace Implementation
Polyspace® raises a violation of this rule if you remove the const
or
volatile
qualification from the type of a pointer or a reference by
using a casting operation.
Troubleshooting
If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
Group: Expressions |
Category: Required |
Version History
Introduced in R2024b