制作字符串的不同方法

Different ways to make a string?

本文关键字:方法 字符串      更新时间:2023-10-16

我是 c++ 的新手,我从一开始就想知道,

这些制作字符串的方法中是否有任何一种以完全相同的方式工作,并且在每种情况下总是给出完全相同的结果? 它们中的结果有什么不同吗?

1) char greeting [6] = { 'h','e','l','l','o','' };
2) char greeting[] = "hello";
3) #include <string>
   string greeting = "hello";
1)

和 2) 的工作方式完全相同。两者都创建一个 6 个元素的非堆分配数组,并在运行时或加载时将字符'h''e''l''l''o'''复制到数组中。

3) 创建一个 std::string 实例并调用其构造函数,该构造函数将字符'h''e''l''l''o' (, '' )* 复制到其内部存储器缓冲区。(* ''不需要存储在内存缓冲区中。

还有另一种方法可以在C++中声明字符串,使用指向char的指针:

const char* greeting = "hello";

这不会复制任何内容。它只会将指针指向位于内存中某处的以 null 结尾的 "hello" 字符串的第一个字符'h'。该字符串也是只读的(修改它会导致未定义的行为),这就是为什么应该在此处使用指向const的指针。

如果您想知道使用哪一个,请选择 std::string ,这是最安全、最简单的。

这些使字符串工作方式完全相同的方法是否在每种情况下始终给出完全相同的结果?

前两个是数组定义:

char greeting [6] = { 'h','e','l','l','o','' };
char greeting [ ] = "hello";
"

工作相同"与第二个定义中的"相同"隐式附加''

至于第三个定义:

string greeting = "hello";

string是一个类类型对象,因此它比简单的数组更复杂。

它们的结果有什么不同吗?

前两个和第三个之间存在定量1 和定性2 的差异,这源于std::string是一个类类型对象的事实。


1.定量:数组比字符串占用更少的内存空间。

2.定性:字符串提供资源管理和许多元素操作工具。