Heim >Backend-Entwicklung >C++ >Warum verhindert die Verwendung von „std::array'-Referenzparametern in einer C-Funktion die Auswertung konstanter Ausdrücke?
Referenzparameter und konstante Ausdrücke
Im bereitgestellten C-Code empfängt die Verkettungsfunktion zwei Referenzparameter vom Typ std::array. Der beim Kompilieren aufgetretene Fehler bezieht sich jedoch auf die Größenelementfunktion des Arrays, die aufgrund ihrer Referenznatur nicht als konstanter Ausdruck betrachtet wird.
Gemäß dem C-Standard ein Kern Ein konstanter Ausdruck ist definiert als ein Ausdruck, der nicht ausgewertet wird als:
Ein ID-Ausdruck (d. h. eine Referenz) auf a Variable oder Datenelement vom Referenztyp, es sei denn, die Referenz:
In diesem Fall erfüllt der Referenzparameter zum Array keines dieser Kriterien. Ohne eine vorangehende Initialisierung kann die Referenz nicht als konstanter Ausdruck ausgewertet werden.
Da die Size-Member-Funktion daher für den Referenzparameter (d. h. data1.size()) aufgerufen wird, Es kann nicht als konstanter Ausdruck betrachtet werden, was zu einem Kompilierungsfehler führt.
Um dieses Problem zu beheben, wird empfohlen, die Vorlagenparameter S1 und S2 direkt zu verwenden, um die Größe des Ergebnisses zu bestimmen Array, anstatt sich auf die Größenelementfunktion der Referenzparameter zu verlassen:
auto result = std::array<uint8_t, S1 + S2>{};
Das obige ist der detaillierte Inhalt vonWarum verhindert die Verwendung von „std::array'-Referenzparametern in einer C-Funktion die Auswertung konstanter Ausdrücke?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!