区别string对象(字符串对象)和字符串常量
一、字符串对象
在C++中,字符串常量是指程序中固定不变的字符串值,例如:"hello world"。字符串常量存储在只读的静态存储区域,通常称为常量区或静态存储区,编译器会在程序编译时为其分配内存空间。由于字符串常量的值是固定的,因此它们不能被修改。
字符串对象是C++标准库中提供的一个类,用于表示可变的字符串值。我们可以使用string类来创建和操作字符串对象,例如:
#include <string>
using namespace std;
int main() {
string str1 = "hello";
string str2 = "world";
string str3 = str1 + " " + str2;
cout << str3 << endl; // 输出 "hello world"
return 0;
}
这里的string是一个类。
在这个例子中,我们使用了string类来创建字符串对象str1、str2和str3,并对它们进行了一些操作,例如拼接字符串。与字符串常量不同,字符串对象中的值是可以修改的。
需要注意的是,虽然字符串常量和字符串对象都表示字符串值,但它们在内存中的存储方式不同。字符串常量存储在只读的静态存储区域,而字符串对象通常是在堆栈或堆上分配内存来存储。这也是为什么字符串常量的值是不可修改的,而字符串对象的值是可变的。
二、字符串常量
const char* str = "Hello";
*str = 'h'; // 编译器报错
这个代码片段会导致编译器报错,因为str指针指向的是字符串常量的首地址,而字符串常量是只读数据,不允许被修改。因此,由于const char*声明的指针是指向常量的指针,它所指向的字符数组是不可修改的。
字符串常量"Hello"被存储在常量区,常量区的内存只有读取权限,没有写入权限,因袭他们的值在程序运行期间不能改变。