所有这些行都编译并运行,输出中没有打印:
std::string ss{6};
ss=7;
std::cout << "ss " << ss << "\n";
我没有看到std::string
的任何引用构造函数会建议它可以将整数强制转换为字符串,那么为什么编译器不会抱怨?
答案 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。