2011-06-18 17 views
9

Permítanme aclarar lo que quiero decir con "normal" C++ primero. Actualmente estoy leyendo "Solución de problemas en C++" de Walter Savitch. Hasta donde yo sé, esto no está escrito específicamente para Microsoft o Unix. Entonces mi pregunta es, ¿cómo difiere de lo que sigo leyendo sobre CLI C++ lo que estoy aprendiendo en este libro (que estoy usando para mi conocimiento universal de C++)?¿Qué es CLI/C++ exactamente? ¿Cómo difiere de C++ "normal"?

¿Es CLI C++ exactamente lo que encontraría si utilicé Visual C++? Estoy totalmente confundido.

Respuesta

11

C++/CLI, (También a veces C++/CLR) se refiere a un lenguaje que se ubica en algún lugar entre el C++ nativo y el .NET framework.

Se usa generalmente para aplicaciones en las que necesita puentear algún código nativo (C++ puro) y código administrado (como VB, C#, F #, etc.).

C++/CLI es una bestia muy diferente a la normal de C++. Y cuando la gente dice Visual C++, el significado puede variar según el contexto. A veces se refieren a C++ con la capa de tiempo de ejecución de lenguaje común (CLR) habilitada, otras veces significan simplemente C++. Es desafortunado que haya muchos términos diferentes y muchos nombres equivocados, pero ¿qué puedes hacer?

+0

Entonces, si solo deseara utilizar el estándar C++, plantillas e impulso, ¿no necesitaría CLR? ¿Por qué necesitaría usar CLR, si quería usar bibliotecas .NET? Gracias – Jean

+1

. Utilizaría CLR cada vez que planee llamar a bibliotecas .NET, o si desea que su código funcione bien con el código .NET que lo está llamando. Si desea simplemente escribir C++, no se moleste con C++/CLI. Ambos tienen sus dominios previstos, pero si estás escribiendo C++ puro no hay necesidad de CLR. –

+3

"* También a veces C++/CLR *" No, el nombre del idioma es C++/CLI; si alguna vez se llama C++/CLR, es un error de alguien que no sabe nada mejor. – ildjarn

6

C++ y C++/CLI son muy diferentes. C++/CLI es la versión .NET administrada de C++, creada por Microsoft para habilitar una capa de .NET a código nativo.

+0

http://en.wikipedia.org/wiki/C%2B%2B/CLI –

+4

"* Visual C++ y C++/CLI difieren mucho *" Esta afirmación causa más confusión de lo que resuelve, creo. Visual C++ es un compilador, C++/CLI es un lenguaje. – ildjarn

+0

@ildjarn: Buen punto, siempre lo vi como la implementación de Microsoft de C++. Solucionado eso. – Xeo

1

C++/cli es la versión actual de la herramienta de herramientas Visual C++ de Microsoft. (Hubo un diseño diferente antes de C++/cli)

C++/cli es realmente dos versiones de C++ en una. Existe un compilador C++ altamente estandarizado y también una versión de C++ que se ejecuta en la máquina virtual CLI. Obviamente, el estándar C++ nunca se ejecuta en una máquina virtual, por lo que determina el enfoque dos en uno para el idioma.

Al utilizarlo, puede mezclar unman envejecido y código administrado. "Unmanaged" es un código compilado como el estándar C++. "Gestionado" es un compilador de código para la CLI (.Net), prácticamente un bytecode de la máquina. Microsoft tiene extensas API para códigos administrados y no administrados. Con el producto puede acceder a ambas API.

Puede desarrollar aplicaciones estándar de C++ con el lenguaje y la herramienta, solo tiene que tener cuidado de no utilizar las extensiones no estándar. Sugiero compilar en otro compilador de vez en cuando si tiene dudas. El lado administrado es totalmente no estándar e incluso el lado no administrado tiene toneladas de extensiones no estándar.

PD No soy un experto pero tuve curiosidad y leí acerca de esto la semana pasada. Pensé que tu pregunta merecía una respuesta. ¡Buena suerte!

+0

"C++/cli es la versión actual de la herramienta de herramientas Microsoft Visual C++". Esto es un poco inexacto/engañoso. Visual Studio es el conjunto de herramientas.C++/CLI es uno de los idiomas admitidos allí. – DuckMaestro

+1

* "una versión de C++ que se ejecuta en la máquina virtual CLI" * - Existe el CLR, que es un * entorno de ejecución virtual *. Esto es ** no ** una máquina virtual. El código IL ** se compila ** siempre con el código máquina nativo antes de la ejecución. * "Obviamente, el estándar C++ nunca se ejecuta en una máquina virtual" * - No hay nada obvio al respecto, y no hay nada en la especificación del lenguaje C++ que obligue a C++ a compilar las instrucciones nativas de la máquina. C++ podría muy bien implementarse para ejecutarse en una VM, y aún llamarse * "Estándar C++" *. – IInspectable