为什么在通过添加字符串文字和字符串进行初始化时不会打印字符串

2 c++ string

在案例1中,当我初始化这样的字符串时,输出为:

 #include <iostream>
 #include<string>

 using namespace std;
 //CODE 1
 int main()
 {
    string s="hello" + 'c';
    cout<<s<<endl;
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

但是当我以这种方式写它时它工作正常:

 #include <iostream>
 #include<string>

 using namespace std;
 //CODE 2
 int main()
 {
     string s="hello";
     char k='c';
     s+=k;
     cout<<s<<endl;
     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

现在我很困惑,因为在堆栈溢出问的另一个问题上它说当使用命名空间std时字符串和std :: string之间没有区别,那些答案通过说- > 字符串和std之间没有功能区别: :string因为它们 在c ++中与std :: string vs string 类型相同, 而为这个问题提供的答案指出了不同之处:

编译器是g ++(GCC)4.8.5 20150623(Red Hat 4.8.5-4)

Som*_*ude 6

当你有

string s="hello" + 'c';
Run Code Online (Sandbox Code Playgroud)

它等于

string s=("hello" + 'c');
Run Code Online (Sandbox Code Playgroud)

使用ASCII编码时,它与...相同

string s=("hello" + 99);
Run Code Online (Sandbox Code Playgroud)

这是一样的

string s=(&"hello"[99]);
Run Code Online (Sandbox Code Playgroud)

也就是说,你得到一个指向字符串的第100个元素的指针"hello",它只有六个元素(不要忘记终结符).

走出界限导致未定义的行为.

  • `sizeof(s)`与`sizeof(std :: string)`相同,它与独木舟中的陷门一样有用.`sizeof("hello")`是`sizeof(const char [6])```sizeof(6*char)`是`6*sizeof(char)`是6,标准指定`sizeof( char)`是1. (2认同)