Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, Шахтер, Вы писали:
Ш>>Когда класс vector возвращает тебе ссылку на затребованный объект, он что возвращает "сущность времени компиляции"? Я не думаю, что во время компиляции можно вычислить адрес этого объекта. РМ>Фактически неизвестно насколько извращенным может оказаться результат в результате встраивания ( inline ) и оптимизации.
РМ>Рассмотрим только что придуманный мной пример, когда вектор точно знает на этапе компиляции адрес буфера, что в приницпе можно себе представить: если все данные из памяти для доступа мапятся на опреденный виртуальный адрес, например.
То, что в результате оптимизации в подходящих ситуациях компилятор может очень многое выбросить из кода и из памяти, я думаю, совершенно понятно. Вопрос в другом. "Сущность времени компиляции" должна гарантирована быть вычисляема во время компиляции. Для ссылок таких гарантий, естественно, дать невозможно.
Здравствуйте, Шахтер, Вы писали:
Ш>То, что в результате оптимизации в подходящих ситуациях компилятор может очень многое выбросить из кода и из памяти, я думаю, совершенно понятно.
Ну кое-чего как раз и не может. Не может выкинуть или изменить структуру объекта в памяти, поскольку на этот объект из других единиц трансляции могут смотреть.
Ш>"Сущность времени компиляции" должна гарантирована быть вычисляема во время компиляции.
А это я неверно использую термины Имелось ввиду, что понятие ссылка существует только на этапе компиляции, в отличие от объекта, который наоборот существует только на этапе выполнения, а на этапе компиляции существует мнение, что объекту — быть ( но этапе выполнения ).
Здравствуйте, Рома Мик, Вы писали:
РМ>А это я неверно использую термины Имелось ввиду, что понятие ссылка существует только на этапе компиляции, в отличие от объекта, который наоборот существует только на этапе выполнения, а на этапе компиляции существует мнение, что объекту — быть ( но этапе выполнения ).
Ну, вообще-то на этапе выполнения ничего, кроме сигналов на линиях нет. 0,1,фронт. Между прочим, разглядывая сигналы на ножках процессора на экране осцилографа или логического анализатора, начинаешь задумываться о сущности бытия. Все эти объекты, ссылки и прочее на самом деле суть абстрактные понятия, существующие только в голове. Их даже в тексте программы нет. Это мы, читая текст придаём ему смысл. (с) Ещё один Copyright (c) мой.
Здравствуйте, Шахтер, Вы писали:
Ш>Ну, вообще-то на этапе выполнения ничего, кроме сигналов на линиях нет. 0,1,фронт. Между прочим, разглядывая сигналы на ножках процессора на экране осцилографа или логического анализатора, начинаешь задумываться о сущности бытия. Все эти объекты, ссылки и прочее на самом деле суть абстрактные понятия, существующие только в голове. Их даже в тексте программы нет. Это мы, читая текст придаём ему смысл. (с) Ещё один Copyright (c) мой.
Оно конечно да, несомненно. Но указанные сигналы можно как-то интерпретировать. Так вот, объективно существует память, последоватльность битов. И любому объекту в этой памяти соответсвует группа битов. Хотя это соответствие, конечно, чисто умозрительное на этапе выполнения, но оно есть. А ссылке уже ничего не соответствует. И наоброт, во время компиляции ссылке соответсвует нечто более реальное, чем объекту, которому соответствует только знание, что на этапе выполнеия он будет.
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, Шахтер, Вы писали:
Ш>>Ну, вообще-то на этапе выполнения ничего, кроме сигналов на линиях нет. 0,1,фронт. Между прочим, разглядывая сигналы на ножках процессора на экране осцилографа или логического анализатора, начинаешь задумываться о сущности бытия. Все эти объекты, ссылки и прочее на самом деле суть абстрактные понятия, существующие только в голове. Их даже в тексте программы нет. Это мы, читая текст придаём ему смысл. (с) Ещё один Copyright (c) мой. РМ>Оно конечно да, несомненно. Но указанные сигналы можно как-то интерпретировать. Так вот, объективно существует память, последоватльность битов. И любому объекту в этой памяти соответсвует группа битов. Хотя это соответствие, конечно, чисто умозрительное на этапе выполнения, но оно есть. А ссылке уже ничего не соответствует. И наоброт, во время компиляции ссылке соответсвует нечто более реальное, чем объекту, которому соответствует только знание, что на этапе выполнеия он будет.
Ну почему же не соответствует-то? Точно так же, есть место в стеке или в статической памяти, где лежит значение этой ссылки -- на самом деле просто машинный адрес объекта, на который эта ссылка ссылается. Тут даже не надо долго фантазировать, достаточно посмотреть какой-нибудь простой примерчик на ассемблере.
Здравствуйте, Шахтер, Вы писали:
Ш>Ну почему же не соответствует-то? Точно так же, есть место в стеке или в статической памяти, где лежит значение этой ссылки -- на самом деле просто машинный адрес объекта, на который эта ссылка ссылается.
Да не обязательно. О чем я и толкую. Как будет реализована ссылка и будет ли указатель зависит от компилятора. Для
int a;
int &i = a;
очень легко может не быть никакого указателя. А если он и будет, то это детали реализации. Форсировать создание объекта a ты можешь получив его адрес, он обязан адрес иметь, а со ссылкой такого сделать нельзя, так как адрес объекта ссылки ( а не объекта, на который она ссылается ) получить нельзя, так как его нету.
Здравствуйте, Рома, Вы писали:
РМ> Например, может вообще не быть никакой области памяти, соответсвующей РМ> ссылке. С большой вероятностью так и будет для такого кода: РМ>
РМ> int i;
РМ> int &a = i;
РМ>
При включенной оптимизации с вероятностью 99% для переменной i в следующем
примере также не будет зарезервировано никакой области памяти:
int f()
{
int i = 10;
return i;
}
тем не менее, i обозначает объект типа int.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>тем не менее, i обозначает объект типа int.
Но можно получить адрес i и тогда объект i обязательно будет. А невстроенный объект ( которые не совсем такие, как все остальные ) будет обязательно всегда. Форсировать создание ссылки ты никак не можешь, поскольку не предлагается никакой возможности получить адрес объекта ссылки, поскольку такого объекта не предполагается.
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, Павел Кузнецов, Вы писали:
ПК>>тем не менее, i обозначает объект типа int. РМ>Но можно получить адрес i и тогда объект i обязательно будет. А невстроенный объект ( которые не совсем такие, как все остальные ) будет обязательно всегда.
Тоже не всегда.
РМ>Форсировать создание ссылки ты никак не можешь, поскольку не предлагается никакой возможности получить адрес объекта ссылки, поскольку такого объекта не предполагается.
Конец предложения неверен. Он как раз предполагается, пусть это с точки зрения программиста и "неполноценный объект", просто компилятор может, если сможет, его элиминировать, точно так же, как и объект любого другого типа.
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction. -- Albert Einstein