Missing constexpr specifier
constexpr specifier can be used on variable or function for
compile-time evaluation
Description
This defect identifies potential constexpr variables and functions. For
instance, the defect occurs if:
You omit the
constexprspecifier when a variable is initialized by using an expression that can be evaluated at compile time.The defect checker flags a local variable definition without the
constexprspecifier if the variable is initialized with one of the following and not modified subsequently in the code:An expression involving compile-time constants only.
Calls to a function with compile-time constants as parameters, provided the function is itself
constexpror the function contains only a return statement involving its parameters.A constructor call with a compile-time constant, provided all member functions of the class including the constructor are themselves
constexpr.
The checker does not flag local, static variables.
You omit the
constexprspecifier from functions with a singlereturnstatement that could potentially be evaluated at compile time (given compile-time constants as arguments).
Risk
If a variable value is computed from an expression that involves compile-time constants
only, using constexpr before the variable definition, like
this:
constexpr double eValSquared = 2.718*2.718;
If the expression cannot be evaluated at compile time, the constexpr
keyword ensures that you get a compilation error. You can then fix the underlying issue if
possible.
Note that the const keyword does not guarantee compile-time
evaluation. The const keyword simply forbids direct modification of the
variable value after initialization. Depending on how the variable is initialized, the
initialization can happen at compile time or run time.
Fix
Add the constexpr specifier to the variable or function definition.
Performance improvements might vary based on the compiler, library implementation, and environment that you are using.
Note that constexpr functions are implicitly inlined. So, if you add a constexpr qualifier to a function definition and the function is referenced in multiple source files, you see a compilation error. In this case, move the function definition to a header file that is included in the sources from which the function is called.
Examples
Result Information
| Group: Performance |
| Language: C++ |
| Default: Off |
Command-Line Syntax:
MISSING_CONSTEXPR
|
| Impact: Medium |
PQL Name:
std.defects.MISSING_CONSTEXPR
|
Version History
Introduced in R2020bSee Also
Topics
- Interpret Polyspace Bug Finder Results in Polyspace Platform User Interface
- Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access)
- Address Polyspace Results Through Bug Fixes or Justifications
- Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access)