为什么要编译:string = int

Fro*_*yre 6 c++ gcc stdstring c++11

假设以下代码:

#include <iostream>
#include <string>

int func() { return 2; }

int main()
{
   std::string str("str");
   str = func();
   std::cout << "Acquired value: '" << str << "'" << std::endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么行str = func();编译时没有出现类型不匹配的警告?

我正在使用编译器gcc v.4.7.1并设置-std = c ++ 11标志.

输出:

Acquired value: ''

Kei*_*son 9

所述std::string类包括过载的operator=,它接受一个char值.由于char是整数类型,int可以隐式转换为char.

分配给的值str不是空字符串; 它是一个长度为1的字符串,其单个字符的值为2(Ctrl-B).

尝试将程序的输出提供给cat -vhexdump.

$ ./c | cat -v
Acquired value: '^B'
Run Code Online (Sandbox Code Playgroud)