先说说这几个例子的区别吧:
1、
#include<string>
string url = “www.suiyiwen.com”;
url是一个string对象。为了更加容易地操纵字符串,cpp为我们定义了一个string类(string并不是cpp的关键字),你可以通过它来定义字符串对象,然后通过调用它的方法来获取该字符串的信息,例如获取它的长度:
url.length()
又或者对它进行操纵,例如拼接:
string scheme = “http://”
cout << scheme+url << endl; //输出http://www.suiyiwen.com
2、
下面的三种写法都可以看作是一种:
const char* url = “www.suiyiwen.com”;
因为 const char url[](字符数组),数组名url在编译时会被隐式转为为指针char*,指向字符串的首个字符's'。至于*号的位置,有人喜欢把它放到靠近类型,有人喜欢把它放到靠近变量名,这里有一个关于这个问题讨论的topic
又因为是常量字符串,所以你不能对它进行修改
url[0]='x';//错误,不可以进行修改,就算没有用const来修饰,也不可以
但是在string中却可以
string url = “www.suiyiwen.com”;
url[0] = 'x';//OK
这是因为string为我们承担了管理内存的任务。如果你想要对它进行拼接,你需要自己写一个函数,又或者调用cstring库中的strcat或strncat函数。
在c/cpp中,*有两种作用,一种是用来定义指针类型,char* 就是字符指针。另外一种就是取值,取指针指向的值,想上面所说的
const char *url = “www.suiyiwen.com”;
url是指向字符串的首个字符,所以你对指针url取值,得到的就是字符's'
cout << *url << endl;//输出's'
所以,总的来说,string用起来会比较方便,常量字符串在操纵起来就有点麻烦,也可以说是灵活吧,什么时候用哪个,就需要你自己衡量了。至于性能上,我想我还没有能力来分析!