我是c ++的新手,我想从一开始就知道,
这些制作字符串的方法是否完全以相同的方式工作,并且在每种情况下始终给出完全相同的结果?他们中的任何一个结果有什么不同吗?
1) char greeting [6] = { 'h','e','l','l','o','\0' };
2) char greeting[] = "hello";
3) #include <string>
string greeting = "hello";
Run Code Online (Sandbox Code Playgroud)
1)和2)工作完全相同.既创建一个6元非堆分配的数组,并复制的字符'h','e','l','l','o','\0'在运行时或负荷时的阵列.
3)将创建的一个实例std::string,并调用它的构造,其拷贝中的字符'h','e','l','l','o'(,'\0')*到其内部存储器缓冲器.(*'\0'不需要存储在内存缓冲区中.)
还有另一种在C++中声明字符串的方法,使用指针char:
const char* greeting = "hello";
Run Code Online (Sandbox Code Playgroud)
这不会复制任何东西.它只是将指针指向以'h'null结尾的"hello"字符串的第一个字符,该字符串位于内存中的某个位置.该字符串也是只读的(修改它会导致未定义的行为),这就是为什么应该使用指向const此处的指针.
如果您想知道使用哪一个,请选择std::string,这是最安全和最简单的.