Границы полного выражения и время жизни временных

Возможный дубликат:
С++: продолжительность временных аргументов?

Говорят, что временные переменные уничтожаются как последний шаг при оценке полного выражения, например.

bar( foo().c_str() );

временный указатель живет до тех пор, пока не вернется панель, но что для

baz( bar( foo().c_str() ) );

он до сих пор живет до тех пор, пока не вернется барабан, или baz return означает конец полного выражения здесь, компиляторы Я проверил объекты dest после возврата baz, но могу ли я на это положиться?

Ответ 1

Времена жизни до конца полного выражения, в котором они созданы. "Полное выражение" - это выражение, которое не является выражением другого выражения.

В baz(bar(...));, bar(...) является подвыражением baz(...), а baz(...) не является подвыражением чего-либо. Следовательно, baz(...) - это полное выражение, и все временные параметры, созданные во время оценки этого выражения, не будут удаляться до тех пор, пока не вернется baz(...).

Ответ 2

Как следует из названия, полное выражение - это выражение, включая вызов baz(), и поэтому временное будет жить до тех пор, пока не вернется вызов baz().