C++ 两次相同的for循环:一个编译,另一个不编译
我有一段代码让两个字符串小写 基于的第一个范围似乎已编译,而最后一个范围未编译:Clang给我错误:无法使用const限定类型“const char&”分配给变量“c” 考虑到它们完全相同,为什么第一个会通过而第二个不会通过?请注意,的值类型是std::pair,这意味着对于p来说,首先会得到一个const std::string,然后c的类型将是const char&,不能修改 第一个代码段没有这样的问题;解算器是一个非常量std::string。请注意,的值类型是std::pair,这意味着对于p来说,首先您将得到一个常量std::string,然后c的类型将是常量char&,无法修改C++ 两次相同的for循环:一个编译,另一个不编译,c++,string,c++11,dictionary,C++,String,C++11,Dictionary,我有一段代码让两个字符串小写 基于的第一个范围似乎已编译,而最后一个范围未编译:Clang给我错误:无法使用const限定类型“const char&”分配给变量“c” 考虑到它们完全相同,为什么第一个会通过而第二个不会通过?请注意,的值类型是std::pair,这意味着对于p来说,首先会得到一个const std::string,然后c的类型将是const char&,不能修改 第一个代码段没有这样的问题;解算器是一个非常量std::string。请注意,的值类型是std::pair,这意味着
第一个代码段没有这样的问题;解算器是一个非常量std::string。OT:如果它要编译,它仍然是无用的,因为您修改了原始映射的副本。OT:如果它要编译,它仍然是无用的,因为您修改了原始映射的副本。
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);
}