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

时间:2016-06-27 07:31:32

标签: c++

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

  std::string ss{6}; 
  ss=7;
  std::cout << "ss " << ss << "\n";

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

3 个答案:

答案 0 :(得分:5)

&#34;问题&#34;是std::string可以从char分配,而int可以隐式转换为char

看一下std::basic_string::operator=第(4)点:

basic_string& operator=( CharT ch );

修改

正如M.M's comment中所述,std::string ss{6};会调用构造函数initializer_list<char>(请参阅std::basic_string::basic_string(9))...然后问题重新出现。

答案 1 :(得分:1)

这是

basic_string& operator=( CharT ch );

因此int隐式转换为char

尝试指定值65。打印A

答案 2 :(得分:1)

ss=7行不会调用构造函数,而是调用赋值运算符=()

std::string 确实拥有一个char的赋值运算符,您的值7将转换为char,然后转换为string& operator= (char c);被称为该值。您的字符串将包含ASCII BELL字符。

有关详细信息,请参阅here