String plus Char - 发生了什么?

时间:2014-03-07 22:24:50

标签: c++ string char

我只是想知道在尝试将字符串添加到字符串时发生了什么。

最初,我认为它会像连接一样工作,但它没有:

cout << 'ab' + 'a' << endl;
cout << '' + 'a' << endl;

打印

enter image description here

然而,

cout << 'bla' << endl;
cout << 'ab' + 'a' << endl;
cout << '' + 'a' << endl;

打印

enter image description here

4 个答案:

答案 0 :(得分:7)

字符串文字为char const[N](衰减到char const *),char是小范围整数类型。你在做指针运算。

请求@chris和@Praetorian进行更正。

答案 1 :(得分:1)

将字符串转换为“char *”,然后将“a”(96)的ascii值添加到该字符。您现在正在输出超出字符串末尾的字符。

如果您尝试连接两个字符串,请参阅Append Char To String in C?以获取更多信息。

答案 2 :(得分:1)

请注意,C和C ++中字符串的存储类型为char*char[]。也就是说,C或C ++中的字符串只是一个字符数组(C / C ++中的指针和数组基本相同)。

执行"ab"+'a'时,“ab”被编译为指向内存中某个固定字符串的指针,并且'a'被编译为其ascii值的整数(96)。然后“ab”是指向内存中字符串位置的指针,当你执行“ab”+“a”时,结果是指向字符串开始后96个字节的位置的指针。 cout然后尝试打印该位置的任何数据,在这种情况下是不可打印的。

答案 3 :(得分:0)

您正在打印添加字符串和char的内存值的算术结果。