


## **Verlängert das Binden eines konstanten Verweises an ein Unterobjekt eines temporären Objekts dessen Lebensdauer? Eine Geschichte von GCC und Clang**
Nov 01, 2024 am 06:58 AMBinden einer konstanten Referenz an ein Unterobjekt eines Temporären
Standardverhalten
Das Verhalten beim Binden einer konstanten Referenz an ein Unterobjekt eines Temporärs wird durch den C-Standard definiert und variiert je nach Compiler-Anbieter.
GCC- und Clang-Unterschiede
- GCC (Version 5.2.0): Zerstört die temporäre P2d-Instanz vor der Eingabe von printf in main und behält den Wert bei, indem ein weiteres temporäres Double erstellt wird.
- Clang (Version X): Verlängert die Lebensdauer der temporären P2d-Instanz auf die Lebensdauer von die x-Referenz, die den Destruktor nach printf in main aufruft.
Erläuterungen
Gemäß CWG 1651 sollte das Ergebnis eines Mitgliedszugriffs oder eines Indexausdrucks, der auf einen Wert angewendet wird, behandelt werden als ein x-Wert. Dies impliziert, dass das Binden eines Verweises an ein solches Unterobjekt eines temporären Objekts die Lebensdauer des temporären Objekts nicht verlängern sollte.
Im bereitgestellten Beispiel behandeln jedoch beide Compiler center().x als PR-Wert. GCC verlängert die Lebensdauer nicht, wenn skalare Unterobjekte verwendet werden, da diese nicht von [dcl.init.ref]/(5.2.1.1) abgedeckt werden. Daher kann das temporäre Objekt frühzeitig zerstört werden.
Im Gegensatz dazu hat Clang die ausstehende Lösung zu DR 1651 umgesetzt, die besagt, dass E1, wenn E1 ein temporärer Ausdruck ist und E2 kein Bitfeld bezeichnet, E1 .E2 ist ein temporärer Ausdruck. Da es sich bei center() gemäß dieser Definition um einen temporären Ausdruck handelt, gilt der geänderte Wortlaut in [class.temporary] /5. Es besagt ausdrücklich, dass das entsprechende temporäre Objekt für die Lebensdauer der Referenz bestehen bleibt.
Daher verlängert Clang in diesem Fall die Lebensdauer der temporären P2d-Instanz, während GCC dies nicht tut.
Schlussfolgerung
Das aktuelle Verhalten sowohl in GCC als auch in Clang wird sich voraussichtlich ändern, sobald die vorgeschlagenen Überarbeitungen des C-Standards angenommen werden.
Das obige ist der detaillierte Inhalt von## **Verlängert das Binden eines konstanten Verweises an ein Unterobjekt eines temporären Objekts dessen Lebensdauer? Eine Geschichte von GCC und Clang**. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
