Ist es möglich, std :: string in einem conexpr zu verwenden?
Mit C++11, Ubuntu 14.04, GCC-Standard-toolchain.
Dieser code nicht:
constexpr std::string constString = "constString";
Fehler: der Typ 'const string {aka const std::basic_string}' von
constexpr variable 'constString' ist nicht wörtlich gemeint... weil...
'std::basic_string' hat einen nicht-trivialen Destruktor
Ist es möglich std::string
imconstexpr
? (offenbar nicht...), Wenn ja, wie? Gibt es einen alternativen Weg, um eine Zeichenfolge in eine constexpr
?
Kommentar zu dem Problem
std::string
ist nicht wörtlich Art @PiotrS - die Frage sagt, dass...
@Vektor ich fragte Sie, was die constexpr ist oder warum wollen Sie
std::string
constexpr? es gibt mehrere compile-time string-Implementierungen auf SO. was ist der Punkt zu Fragen, wenn du eine nicht-wörtliche Art constexpr, wenn Sie verstehen, Fehlermeldung und weiß nur literal-Typen gemacht werden können constexpr? wie gut, es gibt mehrere Gründe, warum man möchte, um eine constexpr-Instanz, so schlage ich vor, Sie klären Ihre Frage Ja, wie @PiotrS. sagte, es gibt
constexpr
- string-Implementierungen gibt. std::string
ist nicht einer von Ihnen. @PiotrS - es sind mehrere compile-time string-Implementierungen auf SO - OK, danke, verstanden. Das ist keine option für mich, aber es beantwortet meine Frage: auf keinen Fall std::string arbeiten. Als ich bemerkte tenfour, ich Frage mich, ob es eine Möglichkeit zur Nutzung von std::string in einer Weise, die funktionieren würde. Es gibt viele tricks, ganz sicher bin ich mir nicht bewusst.
InformationsquelleAutor der Frage Vector | 2014-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, und dein compiler schon gab Sie eine umfassende Erklärung.
Aber Sie könnten dies tun:
Zur Laufzeit, dies kann verwendet werden, zu konstruieren, ein std::string wenn Sie benötigt wird.
InformationsquelleAutor der Antwort tenfour
In C++17, die Sie verwenden können,
string_view
:Einen
string_view
ist einstring
-ähnliches Objekt, das als eine unveränderliche, nicht-besitzenden Verweis auf eine Sequenz vonchar
Objekte.InformationsquelleAutor der Antwort Joseph Thomson
Da das problem der nicht-trivialen Destruktor also wenn der Destruktor entfernt von der
std::string
, ist es möglich zu definieren, eineconstexpr
Instanz dieses Typs. Wie dieseInformationsquelleAutor der Antwort neuront