LINUX.ORG.RU

raw string

 


0

1

Не понимаю, почему raw строка должна записываться как R"()" - зачем лишние скобки внутри? Почему так решили отцы-основатели, какие аргументы?

P.S. Я знаю, что вместо скобок можно использовать что-то другое.

потому что без них теряется смысл (надо эскейпить кавычки)

смысл в том, чтобы самому задать делимитеры, которые не встречаются в строке как подстрока

f1u77y ★★★★
()
Ответ на: комментарий от watashinoshi

для \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

в плюсах есть обычные строковые литералы — экранируй сколько хочешь

raw string literals на тот случай если экранирование сильно затрудняет чтение (регэкспы например)

f1u77y ★★★★
()
Ответ на: комментарий от former_anonymous

а как тебе в первом случае компилятор отличит кавычку внутри от кавычки закрывающей? в этом и смысл

f1u77y ★★★★
()
Ответ на: комментарий от xaizek

по-мойму это простейшая проблема логики парсера, которую наверно способен решить любой первокурсник. Неужели парсер языка, на котором пишут космический софт не способен посчитать кавычки? Это же какой-то бред, не думаю что проблема в этом.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от f1u77y

а как тебе в первом случае компилятор отличит кавычку внутри от кавычки закрывающей?

первая кавычка - открывающая, последняя - закрывающая. Да, вот так просто :)

former_anonymous ★★★
() автор топика
Ответ на: комментарий от watashinoshi

raw string
экранирование символов для кого придумали?

You are doing it wrong.

anonymous
()
Ответ на: комментарий от former_anonymous

а что такое последняя кавычка

char *s = R""", *t = "";

как по-твоему сделать чтоб оно парсилось как ожидается (создаётся переменная t)

ещё raw string literals могут быть на много строк кода, и чо теперь, искать все кавычки до конца файла, м?

f1u77y ★★★★
()
Последнее исправление: f1u77y (всего исправлений: 1)
Ответ на: комментарий от former_anonymous

вот такие люди и создают питоны.

напишешь хоть один нормальный парсер - поймёшь, почему так не работает и почему так не делают.

dzidzitop ★★
()
Ответ на: комментарий от former_anonymous

только на нём не пишут software, а всего лишь какие то тесты, мини утилиты, плагины, не более

anonymous
()
Ответ на: комментарий от watashinoshi

Потому что писать так:

    regex re(R"S(^"[^"]*")S");

удобней, чем так:
    regex re("^\"[^\"]*\"");

evilface ★★
()
Последнее исправление: evilface (всего исправлений: 2)
Ответ на: комментарий от anonymous

только на нём не пишут software

Пишут, к сожалению =/.

Deleted
()
Ответ на: комментарий от former_anonymous

Потому что эта задача не имеет однозначного решения в принципе.

R"""+R"""

?

Это может быть строка «„+R“», а может быть сумма двух строк, состоящих из одной кавычки. И таких примеров можно придумать 100500 и часть из них обязательно встретится в реальном коде.

Язык должен быть однозначным, а не «скорее всего пользователь имел ввиду это».

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Язык должен быть однозначным, а не «скорее всего пользователь имел ввиду это».

Тем не менее, у нас есть most vexing parse.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.