(che può cambiare il suo valore nel corso del programma)
O l'istanza di qualcosa è strettamente correlata a classi e oggetti? In tal caso, come definiresti il concetto di 'variabile' quando si tratta di C ++?
Per quanto ne so, è corretto chiamare valori di tipi primitivi istanze di quel tipo (vedere ad esempio " C ++ Type System ", 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 è stata creata da un costruttore definito in 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 costante). Una volta che un programma è compilato, le variabili non ci sono più. Invece, i dati vengono letti e scritti in registri, memoria, ecc.
Or is 'instance of something' strictly related to classes and objects? If so, how would you define the concept of 'variable' when it comes to C++?
Per dirla in modo conciso possibile per C ++
Per essere chiari:
Bene, cosa significa "corretto"?
Se vogliamo essere super-severi su questo, dobbiamo distinguere tra:
Quindi una variabile, essendo un'espressione, dovrebbe avere un tipo. Il suo valore, l'oggetto a cui si riferisce, sarebbe un'istanza di qualche classe. E si noti che il tipo di variabile e la classe dell'oggetto non sono generalmente la stessa cosa: il tipo statico della variabile mette un limite superiore sulle classi di runtime degli oggetti, in modo che le classi debbano essere un sottotipo della classe corrispondente al tipo.
Vuoi ripetere quel grande boccone tutto il tempo? Diamine no. Quanto strettamente e liberamente vogliamo parlare dipende dal contesto. Così spesso non c'è davvero alcun problema nel dire che "la variabile è un'istanza di questo tipo". Quello che sta succedendo è che usiamo la variabile e il tipo metonimicamente per fare riferimento all'oggetto e una superclasse della sua classe di runtime.
A meno che tu non voglia trascorrere tutta la tua vita nel purismo e nel sofisma ... sì.
Ogni volta che mantieni qualcosa che è identificato in modo univoco un uso per forgiare altre cose identificabili in modo univoco che stai facendo istanziazione.
Alcuni di questi istanziamenti possono avere nomi più precisi, ma in generale questo 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 (probabilmente conteggi le strutture come classi in quel contesto, sono quasi completamente uguale). In Java o Objective-C, le variabili non sarebbero mai istanze ma probabilmente riferimenti a istanze.
Dimenticato: per un breve periodo, un puntatore C ++ può essere un puntatore alla memoria grezza, ad esempio "questo" prima che il costruttore inizi l'esecuzione. Probabilmente non chiamerai * questa istanza ancora a questo punto.