Probabilmente è una buona idea tenere separati i concetti.
Primo, il C++ è una lingua e non specifica nulla su quale piattaforma deve essere mirata. In linea di principio, il codice C++ diritto può essere compilato in assembler nativo x86, bytecode Java, MSIL o qualsiasi altra cosa ti interessi. Credo che Adobe abbia recentemente creato un compilatore C++ che genera un bytecode Flash.
In secondo luogo, con l'indecisione tipica, Microsoft ha creato due linguaggi derivati da C++ che utilizzano .NET. Per prima cosa hanno creato le "estensioni gestite per C++". Poi decisero che lo succhiava, lo abbandonava e cercava di fingere che non fosse mai esistito.
Ora la soluzione migliore per C++ in stile .NET si chiama C++/CLI, ma non è C++. Si estende e cambia la lingua in un numero di modi non standard. (E credo che il comitato standard del C++ abbia chiesto di cambiare il nome per evitare confusione, ma non lo hanno)
Visual Studio 2005 e successivi supporta C++/CLI. (in "Aggiungi progetto", sono elencati in Visual C++ -> CLR)
Tuttavia (non avevi pensato che fosse così semplice, vero?), Microsoft ha fatto di nuovo. Dopo aver specificato C++/CLI, che in realtà è un tentativo ragionevolmente ben progettato di integrare C++ con CLI, si sono resi conto che praticamente nessuno lo usa! Si scopre che anche i programmatori C++ generalmente preferiscono usare C# quando lavorano in .NET e, in caso contrario, il C++ nativo.
Così ora, si stanno concentrando sull'interpolazione tra nativa C++ e .NET più semplice e più potente. Tuttavia, C++/CLI probabilmente non andrà via. Funziona, e in alcuni casi è utile. Non è solo il C++, il killer che speravano in origine.
Visual Studio (da sempre) supporta anche applicazioni C++ native, compilate per codice macchina x86, non dipinte da .NET. Questi sono elencati nella finestra di dialogo "Aggiungi progetto" in Visual C++ -> Win32.
Quindi, se vuoi imparare C++, hai due scelte: Impara C++/CLI, che ti limita a un linguaggio MS solo che sì, genera MSIL invece di codice macchina nativo, e richiede .NET per l'esecuzione, e generalmente non vale la pena perché se hai intenzione di prendere una dipendenza su .NET in ogni caso, perché non scrivere in C#?
Oppure imparare il C++ corretto, che è completamente separato da .NET e non può fare riferimento direttamente agli assembly .NET.
Il punto chiave per l'asporto è che sono lingue separate. O si compila come C++/CLI, il che significa che il compilatore ti permetterà di fare riferimento a assembly .NET, e genererà il codice MSIL, o compilerai come C++, nel qual caso il mondo .NET non esiste.
Infine, una nota di cautela. Nonostante il mio testo sopra ("C++ appropriato" e "Untointed by .NET"), il C++ non è "migliore". In molti casi, non è neanche più veloce. Il C++ ha il potenziale per essere più veloce, ma dipende molto di più dal programmatore.
Il compilatore C# trasforma praticamente qualsiasi cosa in un codice ragionevolmente efficiente. C++ d'altra parte, è pieno di insidie che renderanno il tuo codice più lento di rispetto al C# equivalente.
http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx e i post del blog sono riferimenti che vale la pena leggere per chiunque sia curioso di conoscere le prestazioni di codice simile scritto nelle due lingue.
C'è solo un'area in cui le applicazioni C++ saranno sempre più veloci, e questo è in fase di avvio. un'applicazione .NET potrebbe dover caricare il framework .NET e JIT il codice MSIL, dove inizia un'applicazione nativa ...
Ma a parte questo, è probabilmente un errore supporre che C++ sarà più veloce. È può essere essere, perché ti dà un po 'più di controllo. Ma di solito, ciò significa solo che il compilatore è meno in grado di salvarti dalle inefficienze che crei nel tuo codice.
In una "shell netta" :) –