(che può cambiare il suo valore nel corso del programma)
Oppure "l'istanza di qualcosa" è strettamente correlata a classi e oggetti? In tal caso, come definiresti il concetto di "variabile" quando si parla di C ++?
(che può cambiare il suo valore nel corso del programma)
Oppure "l'istanza di qualcosa" è strettamente correlata a classi e oggetti? In tal caso, come definiresti il concetto di "variabile" quando si parla di C ++?
Risposte:
Per quanto ne so, è corretto chiamare valori di istanze di tipi primitivi di quel tipo (vedere ad esempio "Sistema di tipi C ++" , dal manuale di Visual Studio, ma sto ancora cercando un'altra fonte), anche se credo che questo termine sia usato principalmente quando si discute di oggetti. Un oggetto è un'istanza di una classe C se è stato creato da un costruttore definito nella classe C o in una delle sue sottoclassi.
Una variabile in C ++ non è un concetto di runtime. Esiste all'interno del compilatore come un legame lessicale tra il nome della variabile e una posizione astratta (mutabile se non const). Una volta compilato un programma, le variabili non ci sono più. Invece, i dati vengono letti e scritti in registri, memoria, ecc.
int
. Lo standard C ++ non fa una distinzione tra tipi primitivi e tipi non primitivi quando si parla di cosa fanno le dichiarazioni variabili. T t;
Dichiara quindi un oggetto di tipo T
, indipendentemente dal tipo T
.
Oppure "l'istanza di qualcosa" è strettamente correlata a classi e oggetti? In tal caso, come definiresti il concetto di "variabile" quando si parla di C ++?
Per dirla nel modo più conciso possibile per C ++
Giusto per essere chiari:
malloc()
buffer appena edito, ma non inizializzato: è un'area di memoria che non è ancora un oggetto. Allo stesso modo, un oggetto che è stato esplicitamente distrutto: è una regione di memoria che non è più un oggetto.
Bene, cosa significa "correggere"?
Se vogliamo essere super severi al riguardo, dobbiamo distinguere tra:
Allora una variabile a essere espressione-dovrebbe avere un tipo. Il suo valore - l'oggetto a cui si riferisce - sarebbe un'istanza di una classe. E nota che il tipo della variabile e la classe dell'oggetto non sono generalmente la stessa cosa: il tipo statico della variabile pone un limite superiore sulle classi di runtime degli oggetti, quindi le classi devono essere un sottotipo della classe che corrisponde al tipo.
Vuoi ripetere quel grosso boccone tutto il tempo? Diamine no. Quanto rigorosamente contro vagamente vogliamo parlare dipende dal contesto. Così spesso non c'è davvero nessun problema a dire che "la variabile è un'istanza di questo tipo". Quello che sta succedendo lì è che stiamo usando la variabile e il tipo metonimicamente per riferirci all'oggetto e ad una superclasse della sua classe di runtime.
A meno che tu non voglia passare tutta la tua vita in purismo e sofismo ... sì.
Ogni volta che conservi qualcosa che è stato identificato in modo univoco, puoi creare altre istanze identificabili in modo univoco.
Alcune di queste istanze possono avere nomi più precisi, ma in generale funziona.
Molte persone riservano "istanza" per istanze di classi. Se lo fai in C ++, una variabile potrebbe essere un'istanza di una classe, un riferimento a un'istanza, un puntatore a un'istanza o un tipo primitivo (con ogni probabilità potresti contare le strutture come classi in quel contesto, sono quasi completamente lo stesso). In Java o Objective-C, le variabili non sarebbero mai istanze ma probabilmente riferimenti ad istanze.
Dimenticato: per un breve periodo, un puntatore C ++ può essere un puntatore alla memoria non elaborata, ad esempio "questo" prima che il costruttore inizi l'esecuzione. Probabilmente non lo chiameresti * un'istanza ancora a questo punto.