Границы полного выражения и время жизни временных
Возможный дубликат:
С++: продолжительность временных аргументов?
Говорят, что временные переменные уничтожаются как последний шаг при оценке полного выражения, например.
bar( foo().c_str() );
временный указатель живет до тех пор, пока не вернется панель, но что для
baz( bar( foo().c_str() ) );
он до сих пор живет до тех пор, пока не вернется барабан, или baz return означает конец полного выражения здесь,
компиляторы Я проверил объекты dest после возврата baz, но могу ли я на это положиться?
Ответы
Ответ 1
Времена жизни до конца полного выражения, в котором они созданы. "Полное выражение" - это выражение, которое не является выражением другого выражения.
В baz(bar(...));
, bar(...)
является подвыражением baz(...)
, а baz(...)
не является подвыражением чего-либо. Следовательно, baz(...)
- это полное выражение, и все временные параметры, созданные во время оценки этого выражения, не будут удаляться до тех пор, пока не вернется baz(...)
.
Ответ 2
Как следует из названия, полное выражение - это выражение, включая вызов baz()
, и поэтому временное будет жить до тех пор, пока не вернется вызов baz()
.