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