(що може змінити своє значення протягом програми)
Або "екземпляр чогось" суворо пов'язаний з класами та об'єктами? Якщо так, то як би ви визначили поняття "змінної", коли мова йде про C ++?
(що може змінити своє значення протягом програми)
Або "екземпляр чогось" суворо пов'язаний з класами та об'єктами? Якщо так, то як би ви визначили поняття "змінної", коли мова йде про C ++?
Відповіді:
Наскільки я знаю, правильно називати значення екземплярів примітивних типів цього типу (див., Наприклад, "C ++ Type Type" з посібника Visual Studio, але я все ще шукаю інше джерело), хоча я вважаю, що цей термін є в основному використовується при обговоренні об’єктів. Об'єкт - це екземпляр класу C, якщо він був побудований з конструктора, визначеного або в класі C, або в одному з його підкласів.
Змінна в C ++ не є концепцією виконання. Він існує всередині вашого компілятора як лексичне пов'язування між назвою змінної та абстрактним (мінливим, якщо не const) розташуванням. Після того, як програма складається, змінних більше немає. Натомість дані зчитуються та записуються в регістри, пам'ять тощо.
int
. Стандарт C ++ не розрізняє примітивні типи і непримітивні типи, коли йдеться про те, що роблять декларації змінних. Тож T t;
оголошує об’єкт типу T
, незалежно від того, який тип T
буде.
Або "екземпляр чогось" суворо пов'язаний з класами та об'єктами? Якщо так, то як би ви визначили поняття "змінної", коли мова йде про C ++?
Сказати це максимально стисло для C ++
Просто, щоб було зрозуміло:
malloc()
виданий, але неініціалізований буфер: це область пам'яті, яка ще не є об'єктом. Так само об'єкт, який був явно знищений: це область пам'яті, яка вже не є об'єктом.
Ну, що означає "правильно"?
Якщо ми хочемо бути надто суворими щодо цього, нам потрібно розрізняти:
Тож тоді змінна - будучи виразом - мала б тип. Його значення - об'єкт, на який він посилається - буде екземпляром якогось класу. І зауважте, що тип змінної та клас об’єкта, як правило, не є одне і те ж - статичний тип змінної ставить верхню межу класів виконання об'єктів, так що класи повинні бути підтипом класу, що відповідає типу.
Ви хочете постійно повторювати цю велику рот? Чорт ні. Наскільки суворо проти слабко ми хочемо поговорити, залежить від контексту. Тому часто немає жодної проблеми сказати, що "змінна є екземпляром цього типу". Що насправді там відбувається, це те, що ми використовуємо змінну та тип метонімічно для позначення об'єкта та надкласу його класу виконання.
Якщо ви не хочете провести все своє життя в пуризмі та софізмі ... так.
Кожен раз, коли ви зберігаєте щось, що унікально визначило, це використовується для підробки інших унікально ідентифікованих речей, які ви робите примірниками.
Деякі з цих примірників можуть мати більш точні назви, але загалом це працює.
Багато людей резервують "екземпляр" для екземплярів занять. Якщо ви це зробите, то в C ++ змінна може бути екземпляром класу, посиланням на екземпляр, вказівником на екземпляр або примітивним типом (ви, ймовірно, вважати структури в цьому контексті класами, вони майже абсолютно те саме). У Java або Objective-C змінні ніколи не будуть екземплярами, а можливо посиланнями на екземпляри.
Забули: на короткий час вказівник C ++ може бути вказівником на необроблену пам'ять, наприклад "це" до того, як конструктор почне виконувати. Ви, ймовірно, ще не зателефонували * цьому екземпляру.