到目前为止,我知道以下几种在C++中拥有字符串的方法(尽管其中一些方法来自C)
string string1 = "Hello";
char string2[] = "Hello";
char string3[] = {'H', 'e', 'l', 'l', 'o', 0};
const char *string4 = "Hello";
new
关键字,但我的直觉告诉我另一种说法。
我发现第一种方法是最方便的,因为它支持几种方法,并且有重载运算符。
正确。 它应该是C++中处理字符串的默认方式。
但我相信那也使得它在性能方面最不优化,是这样吗?
最不优化? 为了什么? 就一个正常的应用程序而言,std::string
的速度非常快。 它针对许多许多用例进行了大量优化。 大量非常聪明的人非常努力地工作,以确保它是快速的。 看一看这个SO问题,有人试图自己实现std::string
操作之一,但无法超过std::string
的性能。
就性能/速度而言,哪种方法是最好的?
std::string
是最快的。 在你说它不是之前,想想你将如何使用你的字符串。 你是否在做以下任何一件事?
std::string
可以非常快速地完成所有这些。 但是,如果最终使用const char*
或char数组,则必须手动执行这些操作,这几乎肯定会比std::string
实现慢。 更不用说您必须处理的各种指针和内存问题了。
其中哪些在堆栈上分配,哪些在堆上分配? 我的意思是我没有看到任何新的关键字,但我的直觉告诉我另一种说法。
您显示的所有字符串都在堆栈上,甚至包括std::string
。 std::string
内置SSO(short string optimization),在堆栈上存储短字符串。