constexpr in C++ (constexpr in C++), Lektion, Seite 723468
https://www.purl.org/stefan_ram/pub/constexpr_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

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

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723468 stefan_ram:723468 constexpr in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723468, slrprddef723468, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/constexpr_c++