(это может изменить его значение в течение программы)
Или «экземпляр чего-то» строго связан с классами и объектами? Если да, то как бы вы определили понятие «переменная», когда речь заходит о C ++?
(это может изменить его значение в течение программы)
Или «экземпляр чего-то» строго связан с классами и объектами? Если да, то как бы вы определили понятие «переменная», когда речь заходит о C ++?
Ответы:
Насколько я знаю, правильно вызывать значения экземпляров примитивных типов этого типа (см., Например, «Система типов C ++» из руководства Visual Studio, но я все еще ищу другой источник), хотя я считаю, что этот термин в основном используется при обсуждении предметов. Объект является экземпляром класса C, если он был построен из конструктора, определенного либо в классе C, либо в одном из его подклассов.
Переменная в C ++ не является концепцией времени выполнения. Он существует внутри вашего компилятора как лексическая связь между именем переменной и абстрактным (изменяемым, если не константным) местоположением. Как только программа скомпилирована, переменных там больше нет. Вместо этого данные читаются и записываются в регистры, память и т. Д.
int
. Стандарт C ++ не делает различий между примитивными типами и не примитивными типами, когда речь идет о том, что делают объявления переменных. Поэтому T t;
объявляется объект типа T
, независимо от того, какой тип T
происходит.
Или «экземпляр чего-то» строго связан с классами и объектами? Если да, то как бы вы определили понятие «переменная», когда речь заходит о C ++?
Чтобы выразить это как можно более кратко для C ++
Просто быть чистым:
malloc()
редактируемом, но неинициализированном буфере: это область памяти, которая еще не является объектом. Аналогично, объект, который был явно разрушен: это область памяти, которая больше не является объектом.
Ну, что значит «исправить»?
Если мы хотим быть очень строгими, мы должны различать:
Таким образом, переменная, являющаяся выражением, будет иметь тип. Его значение - объект, на который он ссылается - будет экземпляром некоторого класса. И обратите внимание, что тип переменной и класс объекта обычно не одно и то же - статический тип переменной устанавливает верхнюю границу для классов времени выполнения объектов, так что классы должны быть подтипом класса, соответствующего типу.
Вы хотите повторять этот большой глоток все время? Черт возьми нет. Насколько строго и свободно мы хотим говорить, зависит от контекста. Поэтому часто нет проблем с утверждением, что «переменная является экземпляром этого типа». На самом деле происходит то, что мы используем переменную и тип метонимически для ссылки на объект и суперкласс его класса времени выполнения.
Если только вы не хотите провести всю свою жизнь в пуризме и софизме ... да.
Каждый раз, когда вы сохраняете что-то однозначно идентифицированное, вы используете его для создания других уникально идентифицируемых вещей, которые вы делаете, создавая экземпляр.
Некоторые из этих экземпляров могут иметь более точные имена, но в целом это работает.
Многие люди оставляют за собой «экземпляр» для занятий. Если вы сделаете это, то в C ++ переменная может быть экземпляром класса, ссылкой на экземпляр, указателем на экземпляр или типом примитива (в этом контексте вы, скорее всего, считаете структуры классами, они почти полностью то же самое). В Java или Objective-C переменные никогда не будут экземплярами, но могут ссылаться на экземпляры.
Забыл: на короткое время указатель C ++ может быть указателем на необработанную память, например, «this» до того, как конструктор начнет выполняться. Скорее всего, вы еще не назвали бы это экземпляром.