我在阅读库的代码库时遇到以下内容。+ =一对运算符和make_pair带模板
errorMap
,在下面的代码中使用的定义为:
map <const string, pair<int, double>> errorMap;
和代码的存在的相关部分:
errorMap["substitutions"] += make_pair<int,double>(targetLength, substitutions);
errorMap["insertions"] += make_pair<int,double>(targetLength, insertions);
errorMap["deletions"] += make_pair<int,double>(targetLength, deletions);
上面部分被投掷this编译错误。当通过它自己的构建系统运行库时,代码似乎正在编译。有人能澄清一下这里究竟发生了什么吗? PS:我已经看过cppreference和其他站点上的文档对,他们都没有指定一对+=
运算符。这是我第一次遇到带有模板参数的make_pair
,我也无法找到更多信息。
也许他们定义了自己的operator + =? – immibis
不太可能,除非可能超载对的+ =运算符。那可能吗? –
jerin
我认为这个错误是因为'make_pair'使用了完美的转发,它只在它推导出类型时才起作用。通过指定类型,它将只接受rvalues。我不知道为什么错误会消失。 –