Возможно иметь параметр функции, который обеспечивает следующую семантику:
Параметр не будет изменен функцией. Вызов функции никогда не создает копию или временный объект для параметра.
Пример:
void f(const std::string & str);
Интерфейс сообщает клиентам, что параметр не будет изменен, и если параметр уже имеет тип std::string, копия не создается.
Но это все еще можно назвать
const char * hello = "hello";
f(hello);
который создает временный объект std::string перед входом в функцию f и снова уничтожает его после выхода из f.
Можно ли запретить это либо с помощью другого объявления функции, либо (гипотетически) изменив реализацию std::string.
std::string
является использованиеstd::string_view
или домашнего решения. - person SergeyA   schedule 07.05.2018