descargar - ¿Existe un programa válido de C++ 11 con la expresión ''C++ 11''?
c++17 descargar (3)
El nombre del lenguaje de programación C ++ deriva del lenguaje principal C y del operador ++ (podría decirse que debe ser ++ C) y, por lo tanto, la expresión C++
puede aparecer naturalmente en los programas de C ++. Me preguntaba si puede escribir un programa de C ++ válido utilizando el estándar 2011 ( sin extensiones ) y que contenga la expresión C++11
sin comillas y después del preprocesamiento (nota: edite el requisito, vea también la respuesta).
Obviamente, si pudiera escribir un programa en C ++ antes del estándar de 2011 con las expresiones C++98
o C++03
, entonces la respuesta es un sí trivial. Pero no creo que eso fuera posible (aunque realmente no lo sé). Entonces, ¿se puede hacer con la nueva armería de C ++ 11?
Entonces, ¿se puede hacer con la nueva armería de C ++ 11?
No.
Definir "programa válido de C ++".
El estándar de C ++ define un "programa de C ++ bien formado" como "un programa de C ++ construido de acuerdo con las reglas de sintaxis, las reglas semánticas diagnosticables y la Regla de definición única". Esto deja abierta la posibilidad de que los programas de C ++ no estén bien formados. (C explícitamente tiene la noción de que los programas son conformes pero no estrictamente conformes, por ejemplo, que usan extensiones de un compilador en particular).
Si considera que es válido usar extensiones, puede implementar un compilador de C ++ que permita C++11
en algún contexto.
NO si requerimos que los caracteres C++11
estén fuera de cualquier literal, después del preprocesamiento , porque en la fase de traducción 7 los tres tokens serán identifier
, ++
y integer-literal
Los primeros dos tokens son una postfix-expression
, el último es un primary
.
No hay reducción en la gramática que pueda contener estos dos no terminales en secuencia, por lo que cualquier programa que contenga C++11
fallará en el análisis de sintaxis.
Sin embargo , si no considera que los literales de caracteres sean cadenas, entonces la respuesta es SÍ, ya que puede contenerlos en un literal de caracteres anchos:
int main()
{
wchar_t x = L''C++11'';
}
que no utiliza el preprocesador o un literal de cadena, y la construcción debe ser compatible con el estándar:
El valor de un literal de caracteres anchos que contiene varios c-caracteres está definido por la implementación.