Здравствуйте, rg45, Вы писали:
R>Ну, я могу только порассуждать на эту тему. По расходу памяти — это ведь смотря как писать код. Размеры блоков не лимитированы и число временных объектов, создаваемых в подвыражениях, могло бы зашкаливать за разумные рамки.
На практике я на некотором другом языке (тоже с RAII) писал, там по сути любое выражение вида
f(g())
означало что-то типа
tmp=g();
f(tmp);
И этот tmp жил до конца текущего блока, и что-то стек с кучей от этого не переполнялись.
R>А с другой стороны, наверное, не смогли придумать сценариев, когда бы это создавало какие-то непреодолимые трудности.
Даже на чистом асме нет непреодолимых трудностей.
В данном примере трудность была создана — удалось получить ссылку на объект, у которого уже вызвался деструктор.
Да, она преодолима. Но это трудность, на решение которой будут тратиться лишние человекочасы.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте