A. Fig Lee wrote:adb wrote:A. Fig Lee wrote:AndreyT wrote:Ни в коем случае. Присваивание в такой ситуации выполняется только оператором присваивания. Инициализация - только конструктором. Деление совершенно четкое и однозначное.
неверно.
Покажите пункт стандарта, где сказанно про возможность замены. Или приведите пример и компилятор.
В стандарте - не сказано. Ето оптимизация.
VC++ - делает.
Нет. VC ничего подобного не делает. Если тебе показалось, что он это где-то делал - приведи конкретный пример, мы объясним тебе твою ошибку.
Также не ясно, каким боком это может относиться к "оптимизации"...
Уверен, что и все остальные.
Ни в коем случае.
Например, если функция виртуальная, а обьект не на хипе, вызов будет тоже не через виртуальную таблицу. Оптимизация-с..
Во-первых, опять неверно. Способ вызова зависит не от того, "на хипе" объект или не "на хипе", а от того, осуществляется ли вызов через указатель/ссылку на объект или через явный экземпляр объекта. А также от ряда других факторов (квалифицированные вызовы, вызовы в конструкторах/деструкторах и т.п).
Во-вторых, спецификация языка С++ вообще не содержит понятия "виртуальной таблицы". Правила вызова виртуальных методов определяются через понятие
динамического типа значения объектного выражения. Если на стадии компиляции динамичиский тип объекта известен, то вызов виртуальной функции может быть выполнен точно так же, как вызов обычной функции (без участия каких-либо "виртуальных таблиц"). И это не имеет никакого отношения ни к какой "оптимизации". Этот банальная разумная кодогенерация.