constexpr in C++
constexpr bei lokalen Konstanten
constexpr bei lokalen Konstanten -> Compiler kennt den Wert der Konstanten, so wie er etwa auch den Wert von Literalen kennt
Dadurch kann der Compiler Programme in bestimmten Fällen beschleunigen
- einmalige Berechnung
{ constexpr auto floor { ::std::floor( 2.7 ) }; /* C++17 */
::std::cout << floor << "\n"s;
::std::cout << floor << "\n"s; }- Aussprachehinweise
- floor ˈflɔɚ
2.) geht aber nur, wenn der Compiler den Wert schon ausrechnen kann, nicht bei Laufzeitwerten oder komplizierten Berechnungen
3.) Geht nur bei bestimmten Typen: int, double, char*, nicht bei ::std::string
constexpr bei Wertfunktionen
Hier wird vom dem Compiler verlangt, daß er den Wert selber ausrechnet, falls er den Wert der Argument kennt.
kelvin.cpp
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
constexpr double kelvin( double const celsius )
{ return celsius + 273.15; }int main(){ std::cout
<< kelvin( 22. ) << "\n"s
<< kelvin( 23. ) << "\n"s; }std::cout
295.15
296.15
constexpr bei Konstanten mit Dateigültigkeitsbereich ⃗⃗
Auch bei Konstanten mit Dateigültigkeitsbereich, kann constexpr verwendet werden.
#include <iostream>
#include <ostream>
#include <string>using namespace ::std::literals;
constexpr auto pi =
3.1415926535897932384626433832795028841972;void main1()
{ ::std::cout <<
"Der Umfang eines Kreises mit dem Radius 9.8 ist "s <<
2 * pi * 9.8 << ".\n"s; }int main()
{ ::std::cout <<
"Der Umfang eines Kreises mit dem Radius 9.8 ist "s <<
2 * ::pi * 9.8 << ".\n"s;
main1(); }
constexpr-Konstanten
Programmbeispiel ⃗⃗
Das folgende Programmbeispiel zeigt die Definition und Verwendung einer bool-Konstanten (hier, einer Konstanten der Gattung »constexpr«).
main.cpp
#include <iostream> // ::std::cout
#include <ostream> // <<
#include <ios> // ::std::boolalpha
#include <string>using namespace ::std::literals;
int main()
{ ::std::cout << ::std::boolalpha;
::std::cout << true << "\n"s;
constexpr bool b{ true };
::std::cout << b << "\n"s; }::std::cout
true
true