Unterschied zwischen Zeichenfolgenliteral und consxpr-Array von Zeichen

8

Ich habe mich gefragt, ob es einen Unterschied gibt zwischen dem, was von ptrToArray und ptrToLiteral im folgenden Beispiel gezeigt wird:

%Vor%
  • Ist mein Verständnis, dass constExprArray und die beiden "hello" Literale alle Kompilierzeitkonstante lvalues ​​korrekt sind?
  • Wenn ja, gibt es Unterschiede in der Art und Weise, wie sie in der ausführbaren Datei gespeichert sind, oder ist es eine reine Compiler-Implementierung oder plattformspezifisch?
  • Werden sie zur Laufzeit hinter den Kulissen anders behandelt?
  • Gibt es noch etwas zu wissen?
jms 21.03.2014, 04:20
quelle

1 Antwort

17

Ein String-Literal und ein constexpr-Array von char sind fast identisch. Ein Zeiger auf jedes ist ein Adreßkonstantenausdruck. Eine lvalue-to-rvalue-Konvertierung ist für ihre Elemente in einem konstanten Ausdruck zulässig. Beide haben eine statische Speicherdauer. Der einzige Unterschied, den ich kenne, ist, dass ein String-Literal ein Array initialisieren kann, während ein conexpr-Array nicht:

%Vor%

Um dies zu umgehen, können Sie das Array in eine Klasse von Literaltypen umwandeln. Wir sind derzeit dabei, einen solchen Wrapper zu standardisieren, der std::string_literal oder ähnlich heißen wird, aber jetzt müssen Sie das von Hand machen.

    
Andrew Tomazos 21.03.2014, 05:11
quelle