Операции типа `2 * 7` считаются литералами? - PullRequest
0 голосов
/ 17 октября 2019

У меня только небольшой вопрос.

Операции считаются литералами? Например, будет ли 2*7 буквальным? Является ли "hello, " + "world!" литералом?

Я знаю, что операнды являются литералами, но выражение не является явно 14 или "hello, world!".

Вопрос Рассматривается ли 2 + 3как буквальный? спрашивает в основном то, что я спрашиваю, но большинство ответов даже не помогли, все, что они делают, это разбивают объявление переменных или говорят о том, что с ними делают компиляторы, но я не ищу этого, поэтому я бы хотелболее подробное объяснение.


Спасибо

1 Ответ

1 голос
/ 17 октября 2019

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

В C / C ++ 2 * 7 будет оптимизирован компилятором длясоздайте новую константу, но на самом деле она юридически не определена как литерал, хотя ее можно рассматривать как константу времени компиляции.

Конкатенация "hello" "world" (примечание без плюса) фактически описывается как шаг предварительной обработкив c ++ генерируется новая строка литеральных констант, но в оригинальном C это не сработало.

Но обратите внимание, что в C макрос обрабатывает фразу параметра 2+7 как отдельные токены, и#define STUPIDMUL3(val) 3 * val для 2+7 даст ответ 13, а не 18. Если бы вы могли найти способ заставить макросы обрабатывать две половины строки по-разному, я думаю, что это будет.

Я бы ожидалинтерпретатору требуется больше времени для обработки 2 * 7, чем 14, потому что он может интерпретировать и решать каждый раз.

...