“字符串”类型是如何在 C++ 中创建的?在C中,字符串是字符数组,但C++是如何将字符数组变成我们在C++中所知道的“字符串”的呢?
最佳答案
字符数组仍然在那里,只是包裹了一个类。想象一下这样的事情:
class String
{
private:
char* stringData;
public:
String(const char* str)
{
stringData = new char[strlen(str)+1];
strcpy(stringData, str);
}
~String() { delete[] stringData; }
String& operator += (const String& rhs)
{
char* newStringData = new char[strlen(rhs) + strlen(stringData) + 1];
strcpy(newStringData, stringData);
strcpy(newStringData + strlen(stringData), rhs);
delete[] stringData;
stringData = newStringData;
return *this;
}
};
这显然是一个非常不完整的示例,但您明白了,对吧?
std::string 的实际实现非常全面,但您自己可以做到。以下是官方 std::string 类与我发布的内容的一些差异:
- 字符串的长度通常作为成员变量包含在内,因此您不必一直调用 strlen 来查找长度。
- std::string 类使用模板,因此您不限于 char 类型。如果您使用的是 Unicode,则可以使用 std::wstring,它通过将 char 类型替换为 wchar_t 类型来使用 16 位或 32 位字符串。
- 通常有很多优化可供选择。最近最流行的是“短字符串”优化。
一旦您相对熟悉了 C++,就应该尝试编写自己的字符串类。这不是你会在实践中使用的东西,但它是图书馆写作的一个很好的练习。
关于c++ - c++中字符串类型是如何创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6825375/