混合使用标准库类string和C风格字符串
可以用字符串字面值初始化string类对象。通常,由于C风格字符串与字符串字面值具有相同的数据类型,而且都是以空字符null技术,因此可以把C风格字符串用在任何可以使用字串字面值的地方。
1.可以使用C风格字符串对string进行初始化或赋值。
2.string类型的加法操作需要两个操作数,可以使用C风格字符串作为其中一个操作数,也允许将C风格字符串用作复合赋值操作的右操作数。
反之不成立, 在要求C风格字符串的地方不可直接使用标准库string类型对象。如无法使用string对象初始化字符指针。
char *str = st2; //错误
const char *str = st2.c_str(); //正确,c_str函数返回C风格字符串,即返回指向字符数组首地址的指针,该数组存放了与string对象相同的内容,并且以结束符null结束。
c_str返回的指针指向const char类型的数组。
c_str返回的数组并不保证一定是有效的,接下来对st2的操作有可能会改变st2的值,使刚才返回的数组失效。如果程序需要持续访问该数据,则应该复制c-str函数返回的数组。
不能用一个数组直接初始化另一个数组,程序员只能创建新数组,然后显式地把源数组的元素逐个复制到新数组。C++允许使用数组初始化vector对象,必须指出用于初始化的第一个元素以及数组最有一个元素的下一位置的地址。
vector<int> ivec(int_arr, int_arr + arr_size); //传递给ivec的两个指针标出了vector初值的范围,第二个指针指向被复制的最后一个元素之后的地址空间。
初始化创建了含有arr_size个元素的ivec