В С++ 11 есть очень удобная функция, называемая сырыми строковыми литералами, которые представляют собой строки без escape-символов. И вместо этого:
regex mask("\\t[0-9]+\\.[0-9]+\\t\\\\SUB");
Вы можете просто написать это:
regex mask(R"(\t[0-9]+\.[0-9]+\t\\SUB)");
Довольно читаем. Однако обратите внимание на дополнительную скобку вокруг строки, которую нужно разместить, чтобы определить строковый литерал.
Мой вопрос: зачем нам даже нужны эти? Для меня это выглядит довольно уродливо и нелогично. Вот минусы, которые я вижу:
- Дополнительная многословие, в то время как вся функция используется, чтобы сделать литералы более компактными
- Трудно различить тело буква и определяющие символы
То, что я имею в виду под жестким отличием:
"good old usual string literal"
^- body inside quotes -^
R"(new strange raw string literal)"
^- body inside parenthesis -^
И вот про:
- Больше гибкости, больше символов доступно в сырых строках, особенно при использовании с разделителем:
"delim( can use () here )delim"
Но, если вам нужна большая гибкость, у вас есть старые хорошие сменные строковые литералы. Почему стандартный комитет решил загрязнить содержимое каждого необработанного строкового литерала этими абсолютно ненужными скобками? В чем причина этого? Какие плюсы я не упоминал?