我在閱讀庫的代碼庫時遇到以下內容。+ =一對運算符和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。我不知道爲什麼錯誤會消失。 –