C++递归打印子序列代码中to_string(ch)返回ASCII值的原因
现象原理说明
核心原因分为两点:
char类型的底层存储本质
在C++标准中,char属于整型基础类型,变量中存储的原始值就是对应字符的ASCII编码整数。比如字符'A'的存储值就是十进制的65,只是直接用cout输出char类型时,编译器会调用字符输出重载,把数值解释为对应字符展示。std::to_string的隐式类型转换
C++标准库的to_string函数没有提供接收char类型参数的重载,当你传入char类型变量时,会触发整型提升的隐式转换规则:char会被自动转换为int类型,传入to_string的参数实际是char存储的ASCII整数值。
而to_string(int)的功能就是把输入的整数转换为对应的十进制字符串形式,所以最终输出的就是字符对应ASCII值的字符串表示。
举个对应你代码的示例:如果输入字符串的第一个字符是'a',ch = 'a'对应的ASCII值是97:
- 调用
sub(ros,ans+to_string(ch))时,to_string(ch)会返回字符串"97",追加到ans后 - 调用
sub(ros,ans+ch)时,std::string的+运算符有接收char的重载,会直接把'a'作为字符追加到ans后,两种逻辑的差异也刚好对应你代码中三个分支的不同输出效果。
内容的提问来源于stack exchange,提问作者Chiranjit Debnath
相关产品推荐
相关产品推荐

