C++/CLI: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: standardizzazione nome sezione e modifiche minori |
Funzionalità collegamenti suggeriti: 1 collegamento inserito. |
||
(12 versioni intermedie di 10 utenti non mostrate) | |||
Riga 1:
{{T|inglese|informatica|dicembre 2016}}
'''C++/CLI''' ([[C++]] modificato per la [[Common Language Infrastructure]]) è un [[linguaggio di programmazione]] specifico creato da Microsoft e destinato a sostituire le [[Managed extensions per C++]]. Si tratta di una revisione completa che mira a semplificare la vecchia sintassi del Managed C++, ora deprecato.<ref>[
== Cambiamenti sintattici ==
C++/CLI è concepito come un linguaggio a sé stante, (ad esempio con un nuovo insieme di parole chiave), a differenza del Managed C++ (MC++), che è piuttosto un ''superset'' del C++ in cui le parole chiave non standard erano
Molte sintassi in conflitto, come le versioni multiple dell'operatore <code>new()</code> in MC++, sono state separate: nel C++/CLI e in
===Handles===
In MC++, vi erano due diversi tipi di [[Puntatore (programmazione)|puntatori]]: i puntatori <code>__nogc</code>, essenzialmente ordinari puntatori C++, e i puntatori <code>__gc</code>, usati per i tipi di riferimento
===Rintracciamento di riferimenti===
Un '''rintracciamento di riferimenti''' (anche detto tracking references) in C++/CLI è un handle di una variabile passata per riferimento. Come concetto è simile all'utilizzo di <code>*&</code> (riferimento a un puntatore) nel C++ classico, e (nella dichiarazione di funzioni) corrisponde alla parola chiave <code>ref</code> applicata a tipi in C#, o <code> ByRef </code> in
Un esempio sull'utilizzo del ''rintracciamento di riferimenti'' viene mostrato nel codice che segue. Rimpiazzare il rintracciamento di riferimenti con un handle regolare lascerebbe l'array di stringhe risultante con 10 stringhe handles non inizializzate, in quanto sarebbero impostate solamente le stringhe handle nell'array, dato che vengono passate per valore e non per riferimento.
<
int main()
{
Riga 29:
return 0;
}
</syntaxhighlight>
Si noti che in C# tale
===Finalizzatori e variabili automatiche===
Un'ulteriore differenza con C++/CLI è l'introduzione sintattica di [[finalizzatori]] <code>!ClassName</code>, un tipo speciale di distruttore non deterministico eseguito come parte della [[Garbage collection
Nel paradigma .NET naturale, il modello di distruzione non deterministico annulla il metodo protetto <code>Finalize</code> della classe root <code>Object</code>; mentre il modello
<
// C++/CLI
ref class MiaClasse{
Riga 58:
}
};
</syntaxhighlight>
===Operatore di overloading===
Un operatore di [[overloading]] (o di sovraccarico) funziona esattamente come nel C++ classico. Ogni * diventa un ^, ogni & diventa un %, con il resto della sintassi completamente invariato, con un'eccezione: per le classi
Per esempio, facendo un paragone tra due Stringhe di riferimento (String^) mediante l'operatore == restituirà "true" (vero) a prescindere. Essendo l'operatore di overloading statico, effettuare un cast a Object^ rimuove la semantica di overloading.
<
//effetti sulla referenza dell'operatore di overloading
String ^s1 = "abc";
Riga 74:
s1 == s2; // true, perché riferiscono allo stesso oggetto
o1 == o2; // false, perché non sono lo stesso oggetto
</syntaxhighlight>
==C++/CX==
Il nuovo [[C++/CX]] con l'obiettivo di [[WinRT]], sebbene produca interamente codice "unmanaged", prende in prestito il concetto di ref e la sintassi ^ per la referenza sul conteggio delle componenti di WinRT, che sono simili agli oggetti [[Component Object Model|COM]].<ref>[
==Note==
Riga 83:
==Collegamenti esterni==
* [
* [[Herb Sutter]]: [
* [[Herb Sutter]]: [http://www.gotw.ca/publications/C++CLIRationale.pdf C++/CLI Rationale]
* [
* [http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PG01&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.html&r=1&f=G&l=50&s1=%2220060089942%22.PGNR.&OS=DN/20060089942&RS=DN/20060089942 Patent application regarding whitespace in keywords]
* [http://www.stroustrup.com/bs_faq.html#CppCLI Bjarne Stroustrup's (designer/author of C++) views on C++/CLI]
* [[Stanley B. Lippman]]: [https://web.archive.org/web/20080205003004/http://msdn.microsoft.com/msdnmag/issues/06/00/PureC/default.aspx Hello, C++/CLI]
* [[Stanley B. Lippman]]: [
{{Controllo di autorità}}
{{DEFAULTSORT:C++ CLI}}
|