Chi ha ideato il linguaggio C ai Bell Labs, all'inizio degli anni Settanta?
Risposta : Dennis Ritchie
Dennis Ritchie ha ideato il linguaggio C ai Bell Labs, dove è servito a scrivere il sistema operativo Unix.
Ripassa Linguaggi C e C++: ecco una selezione di domande di ogni livello, con risposta e spiegazione. Per metterti alla prova senza vedere le risposte, gioca ai quiz.
Gioca ai quiz Linguaggi C e C++Risposta : Dennis Ritchie
Dennis Ritchie ha ideato il linguaggio C ai Bell Labs, dove è servito a scrivere il sistema operativo Unix.
Risposta : Bjarne Stroustrup
Bjarne Stroustrup ha iniziato il suo lavoro all'inizio degli anni Ottanta, con il nome « C with Classes », prima di farne il C++.
Risposta : main
L'esecuzione di un programma C o C++ inizia dalla funzione main, qualunque sia il file sorgente che la contiene.
Risposta : std::cout
std::cout è il flusso di uscita standard del C++; std::cin, invece, legge dall'ingresso.
Risposta : Inserisce il contenuto del file indicato nel codice sorgente
Il preprocessore sostituisce la direttiva con il testo del file di intestazione indicato, qui stdio.h, prima che il compilatore lavori.
Risposta : La programmazione orientata agli oggetti
Il C è un linguaggio procedurale. Il C++ aggiunge le classi e quindi la programmazione orientata agli oggetti, riprendendo la sintassi del C.
Risposta : 0
Gli indici degli array partono da 0: un array di n elementi è indicizzato da 0 a n meno 1.
Risposta : 2
Entrambi gli operandi sono interi: la divisione è intera e il risultato 2.5 viene troncato a 2.
Risposta : L'indirizzo di memoria di x
L'operatore & restituisce l'indirizzo di x, che il puntatore p può memorizzare. L'operatore * serve ad accedere al valore puntato.
Risposta : Crea un alias: r designa lo stesso oggetto di x
Un riferimento è un alias dell'oggetto designato: non crea una copia e deve essere inizializzato già al momento della dichiarazione.
Risposta : Nello stack
Le variabili locali vivono nello stack e scompaiono alla fine della funzione. Lo heap serve all'allocazione dinamica, con malloc o new.
Risposta : free
free restituisce al sistema la memoria allocata con malloc. In C++, un oggetto creato con new si libera con delete.
Risposta : Un blocco allocato dinamicamente che non viene più liberato né è accessibile
C'è perdita quando un blocco allocato dinamicamente non viene più liberato mentre il programma non vi può più accedere: la memoria resta riservata inutilmente.
Risposta : L'elemento t[2]
Nell'aritmetica dei puntatori, p + 2 avanza di due elementi, non di due byte: l'espressione designa t[2].
Risposta : I membri di una struct sono pubblici per impostazione predefinita, quelli di una class sono privati
struct e class offrono le stesse possibilità in C++; cambia solo l'accesso predefinito: public per struct, private per class.
Risposta : Quando l'oggetto esce dal suo ambito
Il distruttore viene chiamato automaticamente quando un oggetto locale esce dal suo ambito, il che permette di liberare le sue risorse. Il costruttore, invece, viene eseguito alla creazione.
Risposta : C++11
Il C++11 ha introdotto le lambda, la parola chiave auto, la semantica di spostamento e i thread della libreria standard.
Risposta : std::unique_ptr
unique_ptr distrugge l'oggetto quando esce dal suo ambito. Non può essere copiato, ma soltanto spostato.
Risposta : Acquisire una risorsa in un costruttore e rilasciarla nel distruttore
RAII, da Resource Acquisition Is Initialization, lega la durata di una risorsa a quella di un oggetto: il rilascio avviene automaticamente all'uscita dall'ambito.
Risposta : Converte x in un riferimento rvalue, senza spostare nulla da sé
std::move è un semplice cast: consente al costruttore o all'operatore di spostamento di riprendere le risorse di x.
Risposta : std::map
std::map si appoggia su un albero bilanciato: chiavi uniche, percorso ordinato, ricerca in O(log n). unordered_map, invece, usa una tabella hash senza ordine.
Risposta : 6
La cattura [n] copia il valore di n al momento della creazione della lambda: f restituisce 3 moltiplicato per 2, cioè 6, anche se n cambia in seguito.
Risposta : Il comportamento è indefinito: il programma può andare in crash o produrre un valore qualsiasi
Leggere fuori dai limiti con [] è un comportamento indefinito. Per std::vector, la funzione at() verifica i limiti e solleva std::out_of_range.
Risposta : virtual
Senza questa parola chiave la chiamata è risolta in base al tipo del puntatore. Con essa la scelta avviene in base al tipo reale dell'oggetto, a tempo di esecuzione.
Gioca ai quiz Linguaggi C e C++