为什么 ranged for 循环将 value 隐式转换为 ref?

A_P*_*A_P 0 c++

我很困惑为什么range-for在我的例子中使用 ref ?

#include <vector>
#include <unordered_map>
using namespace std;

int main()
{
    const unordered_map<char, string> d2c_map= { {'1', "abc"} };
    const string digits{"1"};
    vector<string> R;
        
    for(const auto c : d2c_map.at(digits[0])) {
        R.push_back(c); // <-------------------------???
    } 
    return 0;       
}
Run Code Online (Sandbox Code Playgroud)

错误表明 c 的类型是const char&

error: no matching function for call to 'std::vector<std::__cxx11::basic_string<char> >::push_back(const char&)'
Run Code Online (Sandbox Code Playgroud)

演示

cig*_*ien 5

如何将字符串的每个字符推送到字符串向量中?

这一行试图将 a 添加char到 a vector<string>

R.push_back(c);
Run Code Online (Sandbox Code Playgroud)

如果要添加从 构造的字符串char,可以执行以下操作:

R.push_back({c});
Run Code Online (Sandbox Code Playgroud)

  • 或更改为向量&lt;char&gt; (2认同)