为什么将 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 采取 int
或 char
.
正在尝试将 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 采取 int
或 char
.