Есть ли действующая программа С++ 11 с выражением "С++ 11"? - программирование
Подтвердить что ты не робот

Есть ли действующая программа С++ 11 с выражением "С++ 11"?

Название языка программирования С++ происходит от родительского языка C и оператора ++ (это, возможно, должно быть ++ C), и, следовательно, выражение C++ может, естественно, встречаться в программах на С++. Мне было интересно, можете ли вы написать действительную С++-программу, используя стандарт 2011 года (без расширений) и содержащий выражение C++11 не в кавычках и после предварительной обработки (обратите внимание: отредактировано требование, см. Также ответ).

Очевидно, что если бы вы могли написать программу на С++ до стандарта 2011 года с выражениями C++98 или C++03, тогда ответ будет тривиальным да. Но я не думаю, что это было возможно (хотя я действительно не знаю). Итак, можно ли это сделать с новой арсеналом С++ 11?

4b9b3361

Ответ 1

NO, если мы требуем, чтобы символы C++11 находились вне любого литерала после предварительной обработки - потому что на этапе перевода 7 три токена будут identifier, ++ и integer-literal

Первые два токена - это postfix-expression, а позже primary.

В грамматике нет сокращения, которое может содержать эти два нетерминала в последовательности, поэтому любая программа, содержащая C++11, не даст синтаксического анализа.

Однако, если вы не считаете символьные литералы строками, тогда ответ YES, поскольку вы можете содержать его в широком символьном литерале:

int main()
{
    wchar_t x = L'C++11';
}

который не использует препроцессор или строковый литерал, и конструкция должна поддерживаться стандартом:

Значение широкоформатного литерала, содержащего несколько c-символов, определяется реализацией.

Ответ 2

Итак, можно ли это сделать с новой арсеналом С++ 11?

Нет.

Ответ 3

Определите "действительную программу на С++".

Стандарт С++ определяет "хорошо сформированную программу на С++" как "программу на С++, созданную в соответствии с синтаксическими правилами, диагностируемыми семантическими правилами и Правилом одного определения". Это оставляет открытыми возможности программ на С++, которые не являются хорошо сформированными. (C явно имеет представление о программах, которые соответствуют, но не строго соответствуют, например, которые используют расширения конкретного компилятора.)

Если вы считаете, что это правильно для использования расширений, вы можете реализовать компилятор С++, который разрешает C++11 в некотором контексте.