Heim Backend-Entwicklung C++ Können Referenzparameter in C-Consexpr-Funktionen für konstante Ausdrücke verwendet werden?

Können Referenzparameter in C-Consexpr-Funktionen für konstante Ausdrücke verwendet werden?

Nov 29, 2024 am 01:54 AM

Can Reference Parameters Be Used in C   Constexpr Functions for Constant Expressions?

Referenzparameter 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

template <size_t S1, size_t S2>

auto concatenate(const std::array<uint8_t, S1> &data1,

                 const std::array<uint8_t, S2> &data2)

{

    std::array<uint8_t, data1.size() + data2.size()> result; // Possible error here

 

    return result;

}

Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

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

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

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

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

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

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

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

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

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

See all articles