字符串基础
String fundamentals
到目前为止,我知道以下在 C++ 中使用字符串的方法(尽管其中一些来自 C)
string string1 = "Hello";
char string2[] = "Hello";
char string3[] = {'H', 'e', 'l', 'l', 'o', 0};
const char *string4 = "Hello";
- 我发现第一种方法最方便,因为它支持多种方法并且具有重载运算符。但我相信这也使它在性能方面优化最少,是这样吗?
- 哪种方法在性能/速度方面最好?
- 其中哪些分配在堆栈上,哪些分配在堆上?我的意思是我没有看到任何
new
关键字,但我的直觉告诉我并非如此。
I find the first method to be the most convenient as it supports several methods and has overloaded operators.
正确。它应该是您在 C++ 中处理字符串的默认方式。
But I believe that also makes it the least optimized in terms of performance, is that so?
最不优化?为了什么?就普通应用程序而言,std::string
非常 快。它针对许多用例进行了大量优化。大量非常聪明的人非常努力地工作以确保它是快速的。看看这个 SO question,有人试图自己实施 std::string
操作之一,但无法超越 std::string
性能。
Which method is the best in terms of performance / speed?
std::string
是最快的。在你说它不是之前,想想你将如何使用你的琴弦。您是否正在执行以下任一操作?
- 比较
- 串联
- 在函数中传递字符串
- 正在搜索
std::string
可以很快完成所有这些。但是,如果您最终使用 const char*
或 char 数组,则必须 手动执行这些操作 这几乎肯定会 更慢 比 std::string
实现。更不用说您必须解决的各种指针和内存问题。
Which of these are allocated on stack and which on heap? I mean I don't see any new keyword, but then my intuition says otherwise.
您显示的所有字符串都在堆栈上,甚至 std::string
。 std::string
内置了 SSO(短字符串优化),可以在堆栈上存储短字符串。
到目前为止,我知道以下在 C++ 中使用字符串的方法(尽管其中一些来自 C)
string string1 = "Hello";
char string2[] = "Hello";
char string3[] = {'H', 'e', 'l', 'l', 'o', 0};
const char *string4 = "Hello";
- 我发现第一种方法最方便,因为它支持多种方法并且具有重载运算符。但我相信这也使它在性能方面优化最少,是这样吗?
- 哪种方法在性能/速度方面最好?
- 其中哪些分配在堆栈上,哪些分配在堆上?我的意思是我没有看到任何
new
关键字,但我的直觉告诉我并非如此。
I find the first method to be the most convenient as it supports several methods and has overloaded operators.
正确。它应该是您在 C++ 中处理字符串的默认方式。
But I believe that also makes it the least optimized in terms of performance, is that so?
最不优化?为了什么?就普通应用程序而言,std::string
非常 快。它针对许多用例进行了大量优化。大量非常聪明的人非常努力地工作以确保它是快速的。看看这个 SO question,有人试图自己实施 std::string
操作之一,但无法超越 std::string
性能。
Which method is the best in terms of performance / speed?
std::string
是最快的。在你说它不是之前,想想你将如何使用你的琴弦。您是否正在执行以下任一操作?
- 比较
- 串联
- 在函数中传递字符串
- 正在搜索
std::string
可以很快完成所有这些。但是,如果您最终使用 const char*
或 char 数组,则必须 手动执行这些操作 这几乎肯定会 更慢 比 std::string
实现。更不用说您必须解决的各种指针和内存问题。
Which of these are allocated on stack and which on heap? I mean I don't see any new keyword, but then my intuition says otherwise.
您显示的所有字符串都在堆栈上,甚至 std::string
。 std::string
内置了 SSO(短字符串优化),可以在堆栈上存储短字符串。