制作字符串的不同方法?

Aar*_*on 1 c++ string

我是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)

eml*_*lai 5

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,这是最安全和最简单的.