Operatori in C e C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 1:
Questa è una lista degli [[Operatore (informatica)|operatori]] nei [[Linguaggio di programmazione|linguaggi di programmazione]] [[C (linguaggio di programmazione)|C]] e [[C++]]. Tutti gli operatori elencatiseguenti disono seguitoimplementabili (eccettoin quest'ultimo linguaggio, mentre invece altri non lo sono in C, come nel caso degli operatori 'typeof'type conversion'' ( ), esistonoossia nel<code>const_cast</code>, linguaggio<code>static_cast</code>, <code>dynamic_cast</code>, e <code>reinterpret_cast</code><ref name=":0">{{Cita libro|autore=Luis Joyanes Aguilar|titolo=Fondamenti di programmazione in C++. Algoritmi, mentrestrutture dati e oggetti|edizione=II edizione in Clingua soloitaliana|anno=2008|editore=[[McGraw-Hill quelliEducation]]|città=[[Madrid]]-[[Milano]]|ISBN=978-88-386-6477-9}}</ref><ref>{{Cita indicatilibro|autore=Stanley nellaLippman|autore2=Josée colonnaLajoie|autore3=Barbara “InclusoMoo|titolo=C++ inPrimer|edizione=V edizione|editore=Addison-Wesley C”Professional|ISBN=978-0321714114}}</ref>.
 
Molti degli operatori disponibili in C e C++ sono implementabili anchepure in altri linguaggi della cosiddetta “C family”, quali [[C sharp|C#]], [[D (linguaggio di programmazione)|D]], ma anche [[Java (linguaggio di programmazione)|Java]], [[Perl]] e [[PHP]], conmantenendo le medesime caratteristiche mostrate (precedenzearietà, associativitàposizione e semanticaassociatività)<ref>{{Cita web|url=https://www.andreaminini.com/programmazione/c/c-sharp|titolo=Il linguaggio C#|sito=www.andreaminini.com|lingua=it-IT|accesso=2024-08-30}}</ref><ref>{{Cita web|url=https://dlang.org/spec/operatoroverloading.html|titolo=Operator Overloading - D Programming Language|sito=dlang.org|accesso=2024-08-30}}</ref>.
C++ include inoltre gli operatori ''type conversion'' (): <code>const_cast</code>, <code>static_cast</code>, <code>dynamic_cast</code>, e <code>reinterpret_cast</code>. La formattazione di questi operatori intende che il livello di precedenza è irrilevante.
 
Molti degli operatori disponibili in C e C++ sono implementabili anche in altri linguaggi della “C family”, quali [[C sharp|C#]], [[D (linguaggio di programmazione)|D]], ma anche [[Java (linguaggio di programmazione)|Java]], [[Perl]] e [[PHP]], con le medesime caratteristiche mostrate (precedenze, associatività e semantica).
 
== Sintassi degli operatori ==
Nelle tabelle seguenti, <code>a</code>, <code>b</code> e <code>c</code> rappresentano valori validi qualsiasi (''literals'', valori da variabili, oppure ''return value'') o, in alcuni casi specifici, nomi di oggetti o ''lvalues''. <code>R</code>, <code>S</code> e <code>T</code> indicano qualsiasi tipo, mentre <code>K</code> indica un tipo di classe o un tipo ''enum''<ref>{{Cita web|url=https://www.math.unipd.it/~sperduti/CORSO-C++/Operatori.htm|titolo=1.3 Operatori.|sito=www.math.unipd.it|accesso=2024-08-30}}</ref><ref>{{Cita web|url=https://www.html.it/pag/15482/operatori-booleani/|titolo=Operatori booleani|sito=HTML.it|accesso=2024-08-30}}</ref>.
 
=== Operatori aritmetici ===
Tutti gli operatori aritmetici esistono sia in [[C (linguaggio di programmazione)|C]] e C++ e possono essere, come già indicato, sovraccaricati solo in [[C++]]<ref>{{Cita web|url=https://www.britannica.com/technology/C-computer-language|titolo=C++ {{!}} Definition, History, & Facts {{!}} Britannica|sito=www.britannica.com|lingua=en|accesso=2024-08-30}}</ref>.
{| class="wikitable"
|+
Line 154 ⟶ 152:
 
=== Operatori bit a bit ===
Tutti gli operatori bit a bit (o di manipolazione dei bit) esistono sia [[C (linguaggio di programmazione)|C]] che [[C++]] e possono essere sovraccaricati soltanto nel linguaggio inventato da [[Bjarne Stroustrup]]<ref>{{Cita web|url=https://www.treccani.it/enciclopedia/linguaggio-c_(Enciclopedia-della-Scienza-e-della-Tecnica)/|titolo=Linguaggio c++ - Enciclopedia|sito=Treccani|lingua=it|accesso=2024-08-30}}</ref>.
{| class="wikitable"
|+
Line 258 ⟶ 256:
{| class="wikitable"
|+
! rowspan="2" |Nome operatore<ref name=":1">{{Cita libro|autore=Andrea Domenici|autore2=Graziano Frosini|titolo=Introduzione alla programmazione ed elementi di strutture dati con il linguaggio [[C++]]|edizione=VIII edizione|collana="Informatica", diretta da A. L. Frisiani|città=[[Milano]]/[[Pisa]]|ISBN=978-8846462022}}</ref>
! rowspan="2" |Sintassi
! rowspan="2" |Ammette overload (sovraccarico) in C++
Line 413 ⟶ 411:
[[C++]] possiede molti operatori già predefiniti in grado di operare su vari [[Tipo di dato|tipi di dato]], perciò si può parlare di “operatori già sovraccaricati”. Per esempio l’operatore <code>+</code> può essere implementato per sommare sia due variabili di tipo <code>int</code> (interi), sia due variabili di tipo <code>float</code> o <code>double</code> (variabili a virgola mobile).
 
Oltre a quando detto in precedenza, il programmatore può anche “estendere” l’operatività di ciascuno di essi; per esempio operandi complessi definiti con le classi, si potrebbero trattare anche come se fossero dati semplici<ref name=":0" />.
 
In C++ è possibile sovraccaricare tutti gli operatori predifinitipredefiniti, con l’eccezione su accesso al membro <code>(.)</code>, indirezione di accesso al membro <code>(.*)</code> e risoluzione di ambito <code>(::)</code>.
 
Nel caso degli operatori, il numero degli operandi e la priorità dell’operatore sovraccaricato sono le stesse dell’operatore predefinito, mentre il nuovo operatore può essere definito come una ''funzione membro'' oppure come una ''funzione friend'' (funzione amica)<ref>{{Cita pubblicazione|autore=Marco Cococcioni|titolo=Le classi nel linguaggio C++|editore=Dipartimento di Ingegneria dell'Informazione dell'[[Università di Pisa]]|url=http://docenti.ing.unipi.it/m.cococcioni/FdP/parte_2.pdf}}</ref>.
 
== Proprietà degli operatori ==
Ogni operatore possiede delle proprietà, in modo tale da permettere l'interpretazione univoca del significato di ogni singola espressione. Gli esempi che seguono sono tutti applicabili al linguaggio [[C++]] e, a seconda dei casi, anche al [[C (linguaggio di programmazione)|C]]<ref>{{Cita pubblicazione|autore=Marco Cococcioni|titolo=Programmazione in stile C, utilizzando il linguaggio C++|editore=Dipartimento di Ingegneria dell'Informazione dell'[[Università di Pisa]]|url=http://docenti.ing.unipi.it/m.cococcioni/FdP/parte_1.pdf}}</ref>.
 
=== Posizione ===
Un operatore può precedere gli operandi (o argomenti), seguirli oppure né precederli né seguirli<ref name=":1" />. In questi casi parleremo rispettivamente di operatori ''prefissi'', ''postfissi'' oppure ''infissi''.
 
=== Numero di operandi ===
Line 433 ⟶ 431:
 
=== Precedenza degli operatori ===
Ogni operatore possiede una propria precedenza<ref>''The ISO C 1999 standard, section 6.5.6 note 71'' (Technical report). ISO. 1999.</ref><ref name=":2">{{Cita pubblicazione|autore=Marco Cococcioni|titolo=Priorità degli operatori|editore=Dipartimento di Ingegneria dell'Informazione dell'[[Università di Pisa]]|url=http://docenti.ing.unipi.it/m.cococcioni/FdP/priorita_degli_operatori.pdf}}</ref>, rappresentata attraverso un numero naturale tra 1 e 18 in ordine decrescente, dove più è piccolo il numero, maggiore sarà la priorità; per esempio un operatore con priorità 1 avrà maggiore priorità su un operatore con priorità 13.
 
Nell'esempio che segue è possibile osservare una semplice applicazione pratica delle precedenze: <syntaxhighlight lang="c++" line="1">
Line 452 ⟶ 450:
 
=== Associatività degli operatori ===
L'associatività indica l'ordine in cui vengono eseguiti gli operatori aventi la stessa priorità tra loro<ref name=":1" />. Viene riportato un semplice esempio con gli operatori di divisione (priorità 5). <syntaxhighlight lang="c++" line="1">
#include <iostream>
using namespace std;
Line 469 ⟶ 467:
 
=== Tabella delle precedenze e delle associatività ===
Nella tabella seguente sono elencati gli operatori di [[C (linguaggio di programmazione)|C]] e [[C++]] in ordine di priorità con le loro rispettive associatività. Essi sono sempre implementabili su C++, mentre, quelli appositamente indicati nella penultima colonna da sinistra, non lo sono in C<ref name=":1" /><ref name=":2" />.
{| class="wikitable"
|+
Line 801 ⟶ 799:
 
== Sinonimi in C++ ==
[[C++]] definisce una serie di ''keywords'' che possono essere implementate come sinonimi rispetto agli operatori<ref>''ISO/IEC 14882:1998(E) Programming Language C++''. open-std.org – The C++ Standards Committee. 1 September 1998. pp. 40–41.</ref>; tali definizioni non sono assolutamente implementabili nel [[linguaggio C]].
 
{| class="wikitable"
Line 846 ⟶ 844:
 
== Bibliografia ==
 
* {{Cita libro|autore=[[Bjarne Stroustrup]]|titolo=The C++ Programming Language|editore=Addison-Wesley|lingua=inglese|ISBN=978-0-201-70073-2}}
* {{Cita libro|autore=Andrea Domenici, Graziano Frosini|titolo=Introduzione alla programmazione ed elementi di strutture dati con il linguaggio C++|anno=2013|editore=Franco Angeli Editore|p=480|ISBN=978-88-464-6202-2}}
* {{Cita pubblicazione|autore=Marco Cococcioni|titolo=Fondamenti di programmazione|editore=Dipartimento di Ingegneria dell'Informazione dell'[[Università di Pisa]]|url=http://docenti.ing.unipi.it/m.cococcioni/FdP/parti_0_1_e_2_pronte_per_la_stampa.pdf}}
* {{Cita libro|autore=Luis Joyanes Aguilar|titolo=Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti|editore=[[McGraw-Hill Education]]|città=[[Madrid]]-[[Milano]]|lingua=spagnolo|ISBN=978-88-386-6477-9}}
 
== Voci correlate ==
 
* [[C++]]
* [[C (linguaggio di programmazione)]]
* [[Scienze dell'Informazione|Scienza dell'informazione]]
* [[Linguaggio di programmazione]]
 
== Collegamenti esterni ==