Rvalue не связывается с неконстантным временным.
Но если значение по умолчанию имеет смысл, возможно, вы его не модифицируете, и в этом случае сделайте его const, а std::map<std::string, std::string>()
будет работать как значение по умолчанию просто отлично. I.e .:
int insert(std::string x, std::string y,
const std::map<std::string, std::string> &m =
std::map<std::string, std::string>())
Если вам действительно нужна ссылка не const, просто создайте перегруз с одним аргументом, который пройдет локальную переменную.
Комментарий к объявлению: Хорошо. Вы можете передать глобальную переменную в качестве аргумента по умолчанию. Просто
int insert(std::string x, std::string y,
std::map<std::string, std::string> &m = GLOBAL_map);
Я должен предупредить вас, что функция, которая изменяет свои аргументы, особенно, не первый аргумент, довольно плохой дизайн и глобальная переменная подавно.
Интересно, зачем нужна карта по умолчанию для вставки? Вы можете вернуть ссылку на локальную карту «static» из некоторой функции и использовать ее как значение по умолчанию. – jrok
, если на входе есть карта, я вставляю ее во входную карту. иначе я вставляю его в другую глобальную карту. –
Если VAL - это уже существующая карта, это нормально. –