为什么将 int 赋值给 std::map<string,string> 不会产生编译器错误

why doesn't assignment of int to std::map<string,string> produce a compiler error

正在尝试将 int 分配给字符串 std::string s = 5; 产生以下编译器错误:

error: conversion from ‘int’ to non-scalar type ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’} requested

然而,将 int 分配给映射中字符串的值不会。例如下面的代码可以编译,但更糟糕的是使赋值将 int 转换为 char

map <string, string>m;
m["test"] = 5;

这不应该是一个错误吗?

这应该不是错误。 m["test"] = 5; 执行赋值,std::string 有一个 assignment operator 接受 char,并且 int 可以隐式转换为 char

constexpr basic_string& operator=( CharT ch );

另一方面,std::string s = 5;不是赋值而是初始化;并且 std::string 没有任何 constructors 采取 intchar.