C++11-Wertekategorien (L-Werte, X-Werte und Pr-Werte) sind so tief mit dem Kern von C++ selbst verknüpft, dass es nicht möglich ist, über C++ nachzudenken, ohne über Wertesemantik nachzudenken.
C++17 hat das Objektmodell geglättet, sodass wir Dinge wie garantierte Kopierelision haben, die es vorhersehbarer macht, zu wissen, wann Konstruktion/Zerstörung/temporäre Materialisierung usw. dahinter passiert Szenen.
C++26 hat das Konzept der trivialen Verschiebbarkeit eingeführt, sodass wir die Zerstörung einiger verschobener Werte überspringen können. Ich frage mich, welche Auswirkungen es hat, wenn ich über C++-Ausdrücke nachdenke und dabei den Blick auf Wertkategorien gerichtet habe.
Wenn ich zum Beispiel eine Variable (also einen L-Wert) für einen trivial verschiebbaren Typ habe und den Wert irgendwohin verschiebe, erzeugt das dann einen PR-Wert anstelle eines X-Werts?
Wird es zu einem UB, den Zeiger auf den verschobenen Wert zu verwenden?
Was ist mit der vorübergehenden Materialisierung? Ändern sich irgendwelche Regeln?
Ändern sich C++-Wertkategorieregeln wie die Kopierelision mit C++26 trivially_relocatable_if_eligible? ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post
Mobile version