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

use*_*431 1 c++ initialization stdstring variable-assignment

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

\n

error: conversion from \xe2\x80\x98int\xe2\x80\x99 to non-scalar type \xe2\x80\x98std::string\xe2\x80\x99 {aka \xe2\x80\x98std::__cxx11::basic_string<char>\xe2\x80\x99} requested

\n

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

\n
map <string, string>m;\nm["test"] = 5;\n
Run Code Online (Sandbox Code Playgroud)\n

这不应该是一个错误吗?

\n

son*_*yao 5

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

constexpr basic_string& operator=( CharT ch );
Run Code Online (Sandbox Code Playgroud)

另一方面,std::string s = 5;不是赋值而是初始化;并且std::string没有任何构造函数采用intor char