In C und C ++ ist es zulässig, ein Zeichenfolgenliteral aufzubrechen, weil der Präprozessor oder der Compiler dies tut Verkettung benachbarter String-Literale.
%Vor% Was passiert, wenn Zeichenfolgenliteralen das Präfix L
(breite Zeichen), u
(UTF-16), U
(UTF-32), u8
(UTF-8) und rohe Zeichenfolgenliterale vorangestellt wird ( R"foo(this is a "raw string literal" with double quotes)foo"
)?
Zum Beispiel ist Folgendes erlaubt:
%Vor%In C ++ 0x ist Ihr Beispiel gemäß [lex.string] / p13:
gültig... Wenn ein String-Literal keine hat Codierungs-Präfix, wird es als a behandelt String-Literal von demselben Kodierung-Präfix als der andere Operand. ...
In C ++ 03 hieß es in diesem Abschnitt, dass dieser Code ein undefiniertes Verhalten hatte:
... Wenn ein Zeichenfolgen-Literal-Token schmal ist ist neben einem breiten String-Literal Token, das Verhalten ist nicht definiert. ...
Ja, dieses spezielle Beispiel wird von C ++ 0x erlaubt. Jede Kombination von labels ohne Präfix und L wird als L-Präfix behandelt.
EDIT: Citation - N3242 (aktueller C ++ 0x Arbeitsentwurf) §2.14.5 / 13:
In der Übersetzungsphase 6 (2.2) werden benachbarte String-Literale verkettet. Wenn beide Zeichenfolgenliterale dasselbe Codierungs-Präfix haben, hat das resultierende verkettete Zeichenfolgenliteral dieses Codierungs-Präfix. Wenn ein Zeichenfolgenliteral kein Codierungspräfix hat, wird es als Zeichenfolgenliteral desselben Codierungspräfixes wie der andere Operand behandelt.
Tags und Links c++ c++11 string-literals