0
constexpr : use, meaning and importance
Hi I read that constexpr is evaluated at compile time. So does const do. If so , what is the purpose of addition of constexpr in C++? Is it so we can use both interchangeably?
6 Respostas
+ 2
This in turn can drastically improve runtime performance
Consider a Square_root function:
(For simplicity am going to use the standard library sqrt function(since it is also a constexpr) for my definition of Square_root)
We can define it in two ways:
constexpr double Square_root(const double n){return sqrt(n);}
And
double Square_root (const double n){return sqrt(n);}
int main(){
Square_root(9980001);return 0;}
You should probably write the two programs in two different sources files and note the corresponding runtime for each
What you'll realise is the program with the constexpr function incurs a significantly shorter runtime but slightly longer compile time in comparison to the non-constexpr version since the compiler evaluated it and came up with a value that it then hard-wired into the program.
+ 1
For the most part const and constexpr can be used interchangeably.This is especially true for variables
+ 1
The real importance of constexpr(at least as far as I know) is in the use of it with functions.
+ 1
When applied to functions,it instructs a compiler to evaluate a particular function at compile time if all the values it uses are known and subsequently produce a value
+ 1
Generally we don't use sqrt function as it is already in standard library. I understand that you have given a example and I got concept also.... But on the other hand I feel that something which can be evaluated at compile time is not dependent on user input... So, rather than using constexpr , one can directly evaluate value and use as const.
Is it okay or some interesting fact I am missing ln this ?
+ 1
Think of it this way,.....constexpr functions are mainly used for compile time evaluation,that is,if all arguments of a function are known at compile time and are immutable,then there is no need of generating a normal function to be executed at runtime.Rather,it instructs the to compiler "execute" it and produce a value and in the process,reduce the runtime of the program produced