为什么 new 能够创建字符串数组
Why is new able to create an array of strings?
我见过以下列方式使用字符串数组的代码。
string *pointer = new string[runtimeAmmount];
我还看到了字符串中的各个字符,如下所示。
string aString = "this";
char bString[] = "that";
bString[3] = aString[3];
以上将导致 bString 等于 "thas"。这表明字符串实际上是指向第一个字符位置的指针。但是,字符串仍然具有以"string.c_str()"访问的成员函数,这意味着它本身作为一个对象不遵循指针的规则。这一切是如何运作的?
注意:我最初的问题是不同的,但我想通了。如果有人仍然可以回答我最初的问题只是为了验证,我将不胜感激。我最初的问题如下:如果每个字符串在其整个生命周期中长度可以变化,那么字符串数组如何成为新的?琴弦不会碰到对方吗?
我想出的答案是:字符串以某种方式包含指向 C 样式数组的指针,因此对象占用一定的空间量。
或
字符串是 STL 模板种类的一部分,我还没有真正花时间去看。
我将解决您问题中 4 行代码中每行代码中发生的事情,但首先我应该说您的结论不准确。 您被内置在 string
类中的运算符重载"愚弄"。 虽然在内部,string
类可能维护一个 C 样式的字符数组,但它是封装的,并且string
被视为并且应该被视为不透明对象,不同于 C 样式字符串。
现在对于您的每条线:
string *pointer = new string[runtimeAmmount];
在此行中,pointer
设置为指向新分配的(空)string
对象数组。 runtimeAmmount
是数组中的字符串数,而不是 C 样式字符串中的字符数。
string aString = "this";
此行使用 string
类中的(非显式)转换构造函数构造一个新的空字符串:string(const char *)
。 (请注意,在非构造上下文(如 aString = "this";
)中,将使用 string
类的operator=(const char *)
重载。
char bString[] = "that";
这是一个典型的 C 字符串,被视为字符数组。
bString[3] = aString[3];
这使用 string
类的重载operator[]
返回字符(引用),然后将其分配给 C 样式字符数组中的第 3 个字符位置。
我希望这有所帮助。
当你这样做时:
string *pointer = new string[runtimeAmmount];
您正在创建 string
对象的数组。 每个都是使用 string::string
构造函数构造的,它可以做任何需要做的事情。 在这种情况下,string
有一个指向内存的指针,该内存在构造函数中初始化。 因此,您的数组就像一个 char* 指针数组,每个指针都单独分配不当。
你的直觉是正确的。
C++中的字符串是一个对象,可以包含指向其他存储的指针。(他们不需要;谷歌"小字符串优化"如果你想看看为什么不 - 但这是一个转移。
如果您将字符串视为如下所示的结构:
struct str {
int len; // number of bytes allocated
char *data; // pointer to the data
};
然后,您将能够看到字符串如何工作。请注意,std::string 实际上比这复杂得多;但这应该能把这个想法传达出去。
至于模板,std::string
是std::basic_string
的实例化,专门用于char
(而不是专门用于wchar_t
的std::wstring
- 将C#字符串数组传递给C++
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 尝试将 c 字符串数组与分隔符连接起来
- 将字符串数组传递给接受常量字符**的函数
- 返回 C++ 中的字符串数组
- 如何从COM模块中的函数返回字符串数组?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 删除字符串数组
- 如何将字符串数组返回到 java JNI
- 将字符串数组作为函数参数传递
- C++将字符串数组的元素存储到变量中
- 循环访问还包含未使用元素的字符串数组
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 乘以字符串/数组和全局数组
- 递归二进制搜索与字符串数组
- 如何初始化一个标准::字符串数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++字符串数组的动态向量
- 给定一个等长字符串数组