碉堡了,哪位能解答一下小弟的疑惑

碉堡了,哪位大虾能解答一下小弟的疑惑?
代码如下所示:
#include <iostream>
#include <string>

using namespace std;

int main(){
const char *cp1 = "Hello world!";

string  str1 = cp1;
cout << str1 << endl;
system("pause");
return 0;
}


把cp1这个常量字符指针复制初始化到string类型的对象str1,结果输出的却是"Hello world!"。弄不明白为什么会是这样的结果?
------解决思路----------------------
引用:
Quote: 引用:

const char *cp1 = "Hello world!";
cp1定义的是一个字符串常量,这个字符串存储在全局内存区。

请参考c++的网站:
http://www.cplusplus.com/reference/string/string/string/

string  str1 = cp1;
这条语句表示在定义str1时,用一个已经存在的对象去初始化另外一个对象,应该会
调用string 的拷贝构造函数。
from c-string (4) string (const char* s);

然后就是出现你那个正常的结果啦!

cp1不是指针吗,怎么会是字符串常量呢?


C风格的字符串就是一个字符指针。然后字符串是这个以这个指针开头到遇到第一个0结束