Missing constexpr
specifier
constexpr
specifier can be used on variable or function for
compile-time evaluation
Since R2020b
Description
This defect identifies potential constexpr
variables and functions. For
instance, the defect occurs if:
You omit the
constexpr
specifier 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
constexpr
specifier 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
constexpr
or 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
constexpr
specifier from functions with a singlereturn
statement 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.
Examples
Result Information
Group: Performance |
Language: C++ |
Default: Off |
Command-Line Syntax:
MISSING_CONSTEXPR |
Impact: Medium |
Version History
Introduced in R2020bSee Also
Topics
- Interpret Bug Finder Results in Polyspace Desktop User Interface
- Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access)
- Address Results in Polyspace User Interface Through Bug Fixes or Justifications
- Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access)