c++ - 字符串文字将存储在哪里

标签 c++ string

我用的是visual studio 2017

int main()
{
    std::string a = "hello";
    std::cout << &a;  
    a[1] = 'r';
    std::cout << &a;  gives same address as above 
    std::cin.get();
}

当我将鼠标指针悬停在“你好”上时。

它显示 const char[6]。所以“你好”存储在只读内存中。

那怎么可以改变里面的值。

screen shot

最佳答案

where string literals will be stored

字符串文字具有静态存储持续时间。

then how come it is possible to change the value in it.

您没有更改字符串文字(这是在 C++ 中无法完成的事情)。

您已经创建了一个std::string 类型的对象。 std::string 包含一个(可能)动态分配的缓冲区。您已将字符串文字复制到该动态缓冲区中,并且正在修改字符串文字的拷贝。

But with "hrllo".It should allocate new memory for "hrllo" right? and make a to point to new location?

没有。修改 std::string 的字符不会导致重新分配。但是,插入字符可能可能导致重新分配。

关于c++ - 字符串文字将存储在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54984177/

相关文章:

c++ - C++中这两个参数有什么区别?

c++ - 指针类型在结构内的对象类型上的用法是什么?

java - 如何在 Java 中声明一个 uint8_t 数组

javascript - 给定一个字符串格式的函数,我如何将它转换回 javascript 中的函数?

java - 有没有在java中拆分德语复合词的工具?

string - 如何从分隔文本中获取特定字段

java - 字符串中的第 N 个索引?

c - 向链表中插入一个字符串

c++ - 为什么 'visitor pattern'要求每个类都继承VisitorHost接口(interface)类并具有accept()函数?

c++ - 如何找到最接近的元音?