Open In App

constinit Specifier in C++ 20

The constinit specifier is a new feature that is introduced in C++ 20 that allows us to declare a variable with static storage duration. In this article we will discuss the constinit specifier, its usage, advantages, and limitations.

What is constinit Specifier?

The constinit specifier is used to mark variables that must be initialized with compile-time constant expressions or constant-initialized constructors and it also ensures that the initialization will be done during the static initialization phase. It prevents the variables with static storage duration to be initialized at runtime. The variables specified with constinit specifier need to be initialized with a constant expression.



Note: constinit cannot be used together with constexpr or consteval as constinit is used for static initialization of variables, which happens before the program starts the execution, whereas constexpr and consteval are used to evaluate the expression at compile time.

Syntax

constinit T variable = initializer;

Where,



Examples of constinit

Example 1:

In the below code, we will make use of the above syntax to demonstrate the use of the Constinit Specifier.




// C++ program to illustrate the constinit specifiers
#include <iostream>
using namespace std;
  
// Declare a constinit variable
constinit int x = 42;
  
int main()
{
    cout << "x = " << x << endl;
    return 0;
}

Output

x = 42

Example 2:

Below is the code that demonstrates that constinit cannot be used together with constexpr in C++.




// C++ program to illustrate the restrictions on constinit
#include <iostream>
using namespace std;
  
// Error: constinit cannot be used with constexpr
constinit constexpr int x = 42;
  
int main()
{
    cout << x << std::endl;
    return 0;
}

Error

 

Example 3:

Below is the code that demonstrates that constinit cannot be used together with consteval in C++.




// C++ program to illustrate the restrictions on constinit
#include <iostream>
using namespace std;
  
// Error: constinit cannot be used with consteval
constinit consteval int square(int x) { return x * x; }
  
int main()
{
    cout << square(5) << std::endl;
    return 0;
}

Error

 

Advantages of constinit

The benefits of using the Constinit Specifier in C++ 20 are:


Article Tags :
C++