为什么我可以在没有编译器错误的情况下将Int分配给String?

Jer*_*dge 3 c++

所有这些行都编译并运行,输出中没有打印:

  std::string ss{6}; 
  ss=7;
  std::cout << "ss " << ss << "\n";
Run Code Online (Sandbox Code Playgroud)

我没有看到任何引用的构造函数std::string,这表明它可以将整数强制转换为字符串,那么为什么编译器不会抱怨?

man*_*lio 5

"问题"是a std::string可以从中分配charint可以隐式转换为char.

看看std :: basic_string :: operator = point(4):

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

编辑

正如MM的评论中所述,std::string ss{6};调用构造函数initializer_list<char>(参见std::basic_string::basic_string(9))......问题重新出现.

  • @JXB:公平地说,这里更大的问题是C没有字符类型; 它改为以整数形式存储字符的数字代码. (3认同)
  • 哇,我可以肯定地看到为什么有些语言可能会通过不允许类型之间的隐式转换来消除这些错误. (2认同)