Можно создать (и передать) указатель на временный объект, предполагая, что вы знаете, что делаете. Тем не менее, это должно быть сделано по-другому.
Функция с возвращаемым значением не ссылочного типа возвращает rvalue . В C ++ применение встроенного унарного оператора &
к значению запрещено. Это требует lvalue.
Это означает, что если вы хотите получить указатель на ваш временный объект, вы должны сделать это другим способом. Например, в виде двухстрочной последовательности
const string &r = f1(str);
f2(&r);
, который также можно сложить в одну строку с помощью приведения
f2(&(const string &) f1(str));
В обоих случаях выше f2
функция должна принимать параметр const string *
. Просто string *
, как в вашем случае, не сработает, если вы не отбросите константу из аргумента (что, кстати, сделает все это еще более уродливым, чем это уже есть). Хотя, если мне не изменяет память, в обоих случаях нет никакой гарантии, что ссылка прикреплена к оригиналу временно, а не к копии.
Просто имейте в виду, хотя создание указателей на временные объекты является довольно сомнительной практикой, потому что если очевидное время жизни имеет значение. Обычно вам следует избегать необходимости делать это.