C++ es un lenguaje de bajo nivel que se ejecuta sin el contexto de un intérprete. Como tal, tiene muchas opciones de diseño diferentes a las de Python, porque C++ no tiene un entorno en el que pueda confiar para administrar información como tipos y memoria. C++ se puede usar para escribir un kernel de sistema operativo donde no hay código ejecutándose en la máquina, excepto para el programa en sí, lo que significa que el lenguaje (algunas instalaciones de biblioteca no están disponibles para las llamadas implementaciones independientes) debe ser autónomo. Es por eso que C++ no tiene equivalente a Python eval
, ni un medio de determinar miembros, etc. de una clase, ni otras características que requieren un entorno de ejecución (o una sobrecarga masiva en el programa en vez de tal entorno)
para sus preguntas individuales:
- qué tiene que incluir el cada vez de
<iostream>
? ¿Alguna vez no lo necesitas?
#include <iostream>
es la directiva que importa el encabezado <iostream>
en su programa. <iostream>
contiene los objetos de entrada/salida estándar, en particular, cout
. Si no está utilizando objetos de E/S estándar (por ejemplo, sólo utiliza File I/O, o el programa utiliza una biblioteca de interfaz gráfica de usuario, o está escribiendo un núcleo del sistema operativo), no es necesario <iostream>
- misma pregunta para la biblioteca estándar, ¿cuándo no necesita std :: *?
std
es el espacio de nombres que contiene toda la biblioteca estándar. using namespace std;
es algo así como from std import *
, mientras que una directiva #include
es (en este sentido) más como una declaración barebones import std
.(en realidad, el mecanismo es bastante diferente, porque C++ no usa using namespace std;
para buscar objetos automáticamente en std
; using-directive solo importa los nombres en el espacio de nombres global.)
Voy a señalar aquí que el uso directivas (using namespace
) son con frecuencia mal vistas en el código C++, ya que importan muchos nombres y pueden causar conflictos de nombres. using-declarations (using std::cout;
) son preferibles cuando es posible, ya que limita el alcance de una directiva using (por ejemplo, a una función o a un archivo fuente). Nunca coloque using namespace
en un encabezado sin una buena razón.
- es la parte "principal" una función? ¿Alguna vez llamas a la función principal? ¿Por qué es un número entero? ¿Por qué C++ necesita tener una función principal pero Python no?
main
es el punto de entrada al programa, donde se inicia la ejecución. En Python, el módulo __main__
tiene el mismo propósito. C++ no ejecuta código fuera de una función definida como lo hace Python, por lo que su punto de entrada es una función en lugar de un módulo.
- hacer lo necesario "std :: cout < <"? ¿No es innecesariamente largo y complicado en comparación con Python?
std::cout
sólo es necesario si usted no importa el nombre cout
en el espacio de nombres global, ya sea por una directiva utilizando (using namespace std;
) o por una declaración usando-(using std::cout
). En este sentido, una vez más es muy similar a la distinción entre Python import std
y from std import *
o from std import cout
.
El <<
es un operador sobrecargado para objetos de transmisión estándar. cout << value
llama a la función cout
a la salida value
. Python no necesita dicho código adicional porque print
está integrado en el idioma; esto no tiene sentido para C++, donde ni siquiera puede haber un sistema operativo, y mucho menos una biblioteca de E/S.
- ¿Necesitas devolver 0 incluso cuando nunca vas a usarlo?
No. main
(y ninguna otra función) tiene un implícito return 0;
al final. El valor de retorno de main
(o, si se llama a la función exit
, el valor que se le transfiere) se devuelve al sistema operativo como el código de salida. 0 indica que el programa se ejecutó con éxito, que no encontró errores, etc. Si se encuentra un error, se debe devolver un valor distinto de cero (o pasarlo a exit
).
Respuesta simple: C++ y Python están diseñados para resolver diferentes problemas con diferentes restricciones. Diferentes objetivos de diseño le dan diferentes diseños. –
No estoy seguro de qué significa la etiqueta 'código redundante' en este contexto. La tarea de main() en la mayoría de los usos no triviales no es solo dar salida a la consola. Es el punto de entrada para la ejecución del programa. El retorno 0; es para los O.S. que inicia el programa y que * puede * usar el valor de retorno como estado informado desde la ejecución del programa. Es posible que desee leer primero las preguntas frecuentes del Dr. Stroustrup antes de posiblemente incriminar a C++ de muchas otras cosas además de la sintaxis @ http://www.research.att.com/~bs/bs_faq.html. – Abhay
En serio, C++ puede ser la pata de la abeja, pero creo que es un código realmente complicado y tedioso. –