循环两次相同:一个编译,另一个不编译

时间:2018-01-31 09:29:47

标签: c++ string c++11 dictionary

我有这段代码可以使一些字符串小写(参见this SO post)。

import subprocess
subprocess.Popen(["snippingtool.exe"])

第一个基于范围的void some_free_standing_function(std::string solver, std::map<std::string, option_t> opts) { for (auto & c : solver) c = tolower(c); for (auto p : opts) for (auto & c : p.first) c = tolower(c); } 似乎在编译,最后一个没有:Clang给了我for

为什么第一个通过但不通过第二个,因为它们完全相同?

1 个答案:

答案 0 :(得分:5)

请注意,std::mapvalue_typestd::pair<const Key, T>,这意味着p.first您将获得const std::string,然后c的类型为const char&,无法修改。

第一个代码段没有这样的问题; solver是非常量std::string