


Können Referenzparameter in C-Consexpr-Funktionen für konstante Ausdrücke verwendet werden?
Nov 29, 2024 am 01:54 AMReferenzparameter in Consexpr-Funktionen und konstanten Ausdrücken
In C ist ein konstanter Ausdruck ein Ausdruck, der beim Kompilieren einen konstanten Wert ergibt. Zeit. Betrachten Sie die folgende constexpr-Funktion:
1 2 3 4 5 6 7 8 |
|
Beim Kompilieren dieser Funktion mit Clang 6.0 mit -std=c 17 schlägt die Kompilierung fehl, da der Ausdruck data1.size() zur Laufzeit ausgewertet wird. Dieser Fehler tritt nur auf, wenn es sich bei den Parametern um Referenzen handelt, was auf ein mögliches Missverständnis über das Verhalten von Referenzparametern in constexpr-Funktionen hinweist.
Gemäß dem C-Standard ([expr.const]/4) ist ein Ausdruck ein Kern konstanter Ausdruck, wenn seine Auswertung nicht die Auswertung eines ID-Ausdrucks beinhaltet, der auf eine Variable oder ein Datenelement vom Referenztyp verweist, es sei denn, er verfügt über eine vorhergehende Initialisierung, die entweder in konstanten Ausdrücken verwendbar ist, oder seine Lebensdauer begann innerhalb der Auswertung von der Kernkonstantenausdruck.
In der angegebenen Funktion haben die Referenzparameter keine vorangehende Initialisierung, wodurch ihre size()-Ausdrücke nicht konstant sind. Daher können sie nicht in einem konstanten Ausdruck verwendet werden, was zu einem Kompilierungsfehler führt.
Um das Problem zu beheben und die Referenzparameter in einem konstanten Ausdruck zu verwenden, können Sie einfach eine vorangehende Initialisierung bereitstellen oder data1.size( ersetzen) ) mit dem Template-Parameter S1.
Das obige ist der detaillierte Inhalt vonKönnen Referenzparameter in C-Consexpr-Funktionen für konstante Ausdrücke verwendet werden?. 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

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

GULC: C -Bibliothek von Grund auf neu gebaut

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

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

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?

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