Was ist der Grund für Klammern in C ++ 11 Raw String Literalen R "(...)"?

Es ist eine sehr praktische Funktion eingeführt, die in C++11 genannte raw-string-Literale, strings ohne escape-Zeichen. Und statt zu schreiben:

  regex mask("\\t[0-9]+\\.[0-9]+\\t\\\\SUB");

Können Sie einfach schreiben:

  regex mask(R"(\t[0-9]+\.[0-9]+\t\\SUB)");

Ganz mehr lesbar. Beachten Sie jedoch, zusätzliche Klammern um den string zu legen, zu definieren, eine raw-string-Literale.

Meine Frage ist, warum brauchen wir überhaupt diese? Für mich sieht es ziemlich hässlich und unlogisch. Hier sind die Nachteile, was ich sehe:

  • Extra Ausführlichkeit, während die ganze Funktion wird verwendet, um Literale kompakter
  • Schwer zu unterscheiden zwischen dem Körper der wörtlichen und der Definition der Symbole

Das ist, was ich meine, durch die schwer zu unterscheiden:

"good old usual string literal"
 ^-    body inside quotes   -^

R"(new strange raw string literal)"
   ^- body inside parenthesis  -^

Und hier ist der pro:

  • Mehr Flexibilität, mehr Zeichen zur Verfügung, im raw-strings, vor allem, wenn verwendet mit Trennzeichen: "delim( can use () here )delim"

Aber hey, wenn Sie mehr Flexibilität benötigen, haben Sie alte gute escapeable string-Literale. Warum die standard-Ausschuss hat beschlossen, die Umwelt zu verunreinigen den Inhalt jedes raw-string-Literale mit diesen absolut unnötigen Klammern? Was war die überlegung dahinter? Was sind die pros, die ich nicht erwähnt habe?

InformationsquelleAutor der Frage Mikhail | 2013-09-29

Schreibe einen Kommentar