Erstellen kann constexpr std::vector
Kann ich constexpr
std::array:
constexpr std::array<int,5> values {1,2,3,4,5};
Funktioniert es einwandfrei. Aber ich kann keine erstellen constexpr
Vektor:
constexpr std::vector<int> vec = {1,2,3,4,5};
Es gibt mir eine Fehlermeldung:
the type 'const std::vector<int>' of constexpr variable 'vec' is not literal constexpr std::vector<int> vec = {1,2,3,4,5};
- Formal ist das so, weil
vector
Konstruktor ist nicht deklariertconstexpr
. Warum ist es dann nicht so deklariert? Davector
Konstruktor in der Regel benötigt, um Speicher auf dem heap, das kann nur zur Laufzeit geschehen. - Tandetnik so, es gibt keinen Weg, um erstellen Sie constexpr Vektor?
- Nein gibt es nicht. Warum würden Sie wollen? Es macht wenig Sinn für mich. Der springende Punkt bei der
vector
ist seine Fähigkeit, die Größe dynamisch. Wenn Sie nicht brauchen, dass, nur verwendenstd::array
oder einfaches array übergeben werden. - Tandetnik. Eigentlich bin ich mit
Qt
und es gibt nichts, wiestd::array
container, also habe ich versucht zu verwendenQVector
undQList
und es funktioniert nicht. Ich will nicht zu mischenQt
undstl
Container. Also, ich denke, jetzt habe ich zu - Es gibt Anwendungsfälle, zum Beispiel, wenn Sie eine Globale Palette von paar<enum, Vektor - > wo kann der Vektor bestehen aus einer begrenzten (aber Variablen) zahlen zur Kompilierzeit bekannt ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAIK Die
initlializer_list
Konstruktorstd::vector<>
ist nicht deklariertconstexpr
.std::vector
verwendet eine dynamische Speicherverwaltung. Betreibernew
können nicht verwendet werdenconstexpr
Methoden, sostd::vector
nieconstexpr
, constexpr Konstruktor kann nicht erklärt werden, für den es.std::array
nicht verwenden Sie die dynamische Zuweisung von Speicher zugeordnet, in Stapel. Es hat keine problem mit den Regeln der Schöpfung constexpr Objekte und kann constexpr.std::vector nicht constexpr. Es ist ein Vorschlag, std::vector constexpr: https://github.com/ldionne/wg21/blob/master/generated/p1004r1.pdf
Gibt es eine ganze reden über die kommende C++20/23 änderungen: https://youtu.be/CRDNPwXDVp0?t=3080
Also überprüfen Sie wieder mit C++20.
[edit]: constexpr std::vector ist zugelassen für die C++ - 20! https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/
std::string
: stackoverflow.com/a/57284740/895245