在案例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)
当你有
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",它只有六个元素(不要忘记终结符).
走出界限导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |