consteval vs constexpr on variables

7.1k views Asked by At

Is there any difference between constexpr and consteval ?

 consteval int x1 = 2;
 constexpr int x2 = 5;

Is it better to use constexpr than consteval?

1

There are 1 answers

6
Paul Sanders On

The standard actually says:

The consteval specifier shall be applied only to the declaration of a function or function template.

So your first example should not compile.


However, you can put consteval or constexpr on functions:

constexpr int foo (int x) { return x; }
consteval int bar (int x) { return x; }

constexpr when applied to a function is merely largely advisory (see Davis Herring's comment) - it says to the compiler, evaluate this function call at compile time if you can.

consteval, on the other hand, is mandatory - it says to the compiler, generate an error if you can't evaluate this function call at compile time.

Live demo