我有这段代码可以使一些字符串小写(参见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
。
为什么第一个通过但不通过第二个,因为它们完全相同?
答案 0 :(得分:5)
请注意,std::map
的value_type
为std::pair<const Key, T>
,这意味着p.first
您将获得const
std::string
,然后c
的类型为const char&
,无法修改。
第一个代码段没有这样的问题; solver
是非常量std::string
。